2015-04-08 2 views
1

Когда я удаляю строку из cassandra, и данные все еще хранятся в memtable (пока нет SSTable), похоже, что эта удаленная строка никогда не очищается в memtable, поскольку очистка надгробия только с помощью уплотнения и уплотнения применяется только к SSTables. В любом случае, я могу полностью очистить эту удаленную строку от самой памяти, прежде чем погрузить ее в SSTable? Обновления на месте, но похоже, что удалений нет.очистка надгробных камней cassandra от memtable

Мы используем Cassandra 2.0.8.

Благодаря

ответ

3

Если у вас есть RF> 1, надгробные плиты еще нужно настаиваться на диск, чтобы убедиться, что удаление было безопасно передается всем репликам. Например, рассмотрим следующее:

RF = 3 N = 3

У вас есть таблица сотрудников, чтобы огонь в конце месяца. Вы добавляете Джона Смита в список сотрудников для прекращения действия. Через две минуты Джон Смит делает что-то удивительное, и вы хотите удалить его из списка. Вы удаляете его запись, но один из трех узлов находится в автономном режиме. Джон Смит по-прежнему находится в списке сотрудников для запуска этого автономного узла.

Когда memtable сбрасывается на одном из узлов «вверх», он сохранит надгробный камень, указывающий на то, что Джон Смит не должен быть уволен, потому что, когда этот автономный сервер подходит, он должен знать, что работа Джона Смита безопасна.

Уплотнение в конечном итоге удалит надгробный камень после gc_grace_seconds, но основное поведение верное: если вы пишете ячейку, а затем сразу ее удалите, вам все равно нужно сохранить надгробный камень на диск, чтобы убедиться, что все реплики правильно удалены эта клетка.

+0

Я согласен с вашим комментарием, но Datastax Enterprise поддерживает режим InMemory, который по существу должен делать то же самое. У нас есть временные данные, которые идеально вписывались бы в память и никогда не нуждались бы в том, чтобы очищать данные на диске. Было бы неплохо, если бы Кассандра поддерживала уплотнение в памяти. – ppeddi