多个相同批量导入期间的Cassandra行为

时间:2016-05-13 16:37:30

标签: cassandra

我使用Datastax驱动程序将一些csv文件转换为SSTable。然后我使用sstableloader命令将其推入cassandra。我观察了一个我正在努力解释的行为,这是第一次批量导入后的数据库:

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

然后我将一些新数据推送到我的表中,覆盖一行:

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 个答案:

答案 0 :(得分:1)

sstable loader将获取sstable中的数据并将其完全按原样传输到副本。

[1, bbbbb]单元格最初写入的时间戳为插入时间。使用sstableloader传输时包含此时间戳。

当您将[ 1, hehehe]单元格插入memtable(或者如果已刷新其他sstable)时,其时间戳为"现在为#34;。

当你执行SELECT时,它会合并这些单元格,因为存在冲突,它将使用最近插入的那个(最后写入获胜)。最终,当数据被压缩时,[1, bbbbb]单元格将不会被复制并且将不复存在。