Cassandra 墓碑是卡桑德拉阵列中的一个符号吗?

Cassandra 墓碑是卡桑德拉阵列中的一个符号吗?,cassandra,tombstone,Cassandra,Tombstone,我试图调查使用cassandra阵列对性能的影响。 根据我的实验,cassandra在插入或不插入非冻结数组的增量更新时生成墓碑。 但是,根据cqlsh跟踪输出,墓碑不会被读取,因此它们不会对性能产生任何影响 CREATE TABLE tomb_test (id text PRIMARY KEY, events list<text>); insert into tomb_test (id, events) values ('1', ['A', 'B']); bin$ nodetoo

我试图调查使用cassandra阵列对性能的影响。 根据我的实验,cassandra在插入或不插入非冻结数组的增量更新时生成墓碑。 但是,根据cqlsh跟踪输出,墓碑不会被读取,因此它们不会对性能产生任何影响

CREATE TABLE tomb_test (id text PRIMARY KEY, events list<text>);
insert into tomb_test (id, events) values ('1', ['A', 'B']);

bin$ nodetool flush

-- you can see there is "marked_deleted" tombstone for events array
sstabledump node1/data0/spark/test-ef990510057b11e98254712032ed3bea/mc-1-big-Data.db
[
  {
    "partition" : {
      "key" : [ "1" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 62,
        "liveness_info" : { "tstamp" : "2018-12-24T14:04:07.188625Z" },
        "cells" : [
          { "name" : "events", "deletion_info" : { "marked_deleted" : "2018-12-24T14:04:07.188624Z", "local_delete_time" : "2018-12-24T14:04:07Z" } },
          { "name" : "events", "path" : [ "c7481be0-0784-11e9-8254-712032ed3bea" ], "value" : "A" },
          { "name" : "events", "path" : [ "c7481be1-0784-11e9-8254-712032ed3bea" ], "value" : "B" }
        ]
      }
    ]
  }
]

cqlsh:spark> tracing on
cqlsh:spark> select * from tomb_test ;
-- however when reading from tomb_test, no tombstones are scanned
Read 1 live rows and 0 tombstone cells [ReadStage-3] | 2018-12-24 15:07:02.445000 | 127.0.0.1 |           8357 | 127.0.0.1
PS:使用冻结列表类型创建表时,不会创建墓碑

CREATE TABLE tomb_test (id text PRIMARY KEY, events frozen<list<text>>);

cassandra版本:3.11.3

由于您设置了列表的值而没有附加到列表中,因此insert需要删除该列表的任何以前的单元格,因为每个条目都是一个单元格,写入操作不执行任何读取。此删除是一个范围墓碑,删除整行单元格,而不是单个单元格墓碑。这将隐藏事件列表中以前的任何数据

注意:对于冻结的集合,整个集合在单个单元格中序列化,因此它将被覆盖,无需删除


Read 1 live rows和0 tombstone单元格有点误导,它实际上读取范围tombstone,但没有单元格tombstone。我认为墓碑的范围是在该计数中添加的,但在许多当前版本的卡桑德拉上,它们不会是。

什么版本的卡桑德拉?