2016-05-13 13 views
0

Datastaxドライバを使用して、一部のcsvファイルをSSTableに変換しています。その後、sstableloaderコマンドを使ってcassandraにプッシュします。複数の同一の一括インポート中のCassandraの動作

sentence_id | text 
-------------+-------- 
      5 | fffff 
      1 | bbbbb 
      8 | iiiii 
      0 | aaaaa 
      2 | ccccc 
      4 | eeeee 
      7 | hhhhh 
      6 | ggggg 
      3 | ddddd 

私はその後、1行を上書きし、私のテーブルにいくつかの新しいデータをプッシュ:私は、データベースが最初に一括インポートした後で、ここで、私が説明するのに苦労しています行動を観察

session.execute("insert into sentences (sentence_id, text) values (%s, %s)", (100, "hehehe")) 
session.execute("insert into sentences (sentence_id, text) values (%s, %s)", (1, "hehehe")) 

ここにあります今テーブル:私は新しい一括インポートを行う場合

sentence_id | text 
-------------+-------- 
      5 | fffff 
      1 | hehehe 
      8 | iiiii 
      0 | aaaaa 
      2 | ccccc 
      4 | eeeee 
      7 | hhhhh 
     100 | hehehe 
      6 | ggggg 
      3 | ddddd 

は今、私はsentence_id 1の行は変更されることを期待する、まだ何も起こりません。データを置換するためには、インポートの前にSSTableを再生成する必要があります。

何が起こっているかについての洞察はありますか?

答えて

1

sstableローダーはsstable内のデータを受け取り、そのままレプリカに転送します。

[1, bbbbb]セルは、最初に挿入されたときのタイムスタンプで書き込まれました。このタイムスタンプはsstableloaderで転送されたときに含まれます。

[ 1, hehehe]のセルをmemtable(またはフラッシュする場合は別のsstable)に挿入すると、そのタイムスタンプが "now"になります。

SELECTを実行すると、これらのセルがマージされます。競合があるため、最後に挿入されたもの(最後の書き込み勝ち)を使用します。最終的にデータが圧縮されると、[1, bbbbb]セルはコピーされず、存在しなくなります。

関連する問題