Являются ли надгробия инсументом в массиве кассандры?

Я пытаюсь выяснить, как влияет производительность на использование массивов кассандры. Согласно моим экспериментам, Кассандра генерирует надгробия при вставке или не инкрементном обновлении массивов (не замороженных). Однако, согласно выводу трассировки 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

1 ответ

Решение

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

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

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

Другие вопросы по тегам