Являются ли надгробия проблемой в массиве cassandra?

Я пытаюсь выяснить, как влияет на производительность использование массивов 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>>);

Кассандра версия: 3.11.3


person Tomas Bartalos    schedule 27.12.2018    source источник
comment
какая версия кассандры?   -  person Chris Lohfink    schedule 27.12.2018


Ответы (1)


Поскольку вы устанавливаете значение списка (не добавляете к нему), вставка должна удалить все предыдущие ячейки для этого списка, поскольку каждая запись является ячейкой, а запись не выполняет никаких операций чтения. Это удаление представляет собой надгробие диапазона, удаляющее всю строку ячеек, а не надгробие одной ячейки. Это затенит любые предыдущие данные в списке событий.

Примечание. В случае замороженных коллекций вся коллекция сериализуется в одной ячейке, поэтому она будет переопределена, и ее не нужно удалять.

Read 1 live rows and 0 tombstone cells немного вводит в заблуждение, на самом деле он считывает надгробие диапазона, но надгробия ячеек нет. Я думаю, что надгробия диапазона были добавлены в этот счет в CASSANDRA-8527, но на многие текущие версии кассандры ими не будут.

person Chris Lohfink    schedule 27.12.2018