Хранение данных в Memtables и SStables в Кассандре - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть Keyspace с RF=2. Теперь перед сбросом данных они находятся в memtables, и в Cassandra есть только один memtable на семейство таблиц / столбцов.

С тех пор в Кассандре есть только одна памятная записка на семейство столбцов, и я предположил, что RF = 2. Означает ли это, что в memtable есть 2 копии каждой строки?

Кроме того, если я сделаю nodetool flush, будет ли созданный sstable также иметь две копии каждой записи?

1 Ответ

0 голосов
/ 07 сентября 2018

Коэффициент репликации 2 означает, что данные будут храниться на 2 узлах.

Путь записи следующий:

  1. Клиент отправляет запрос одному узлу, который станет координатором этой записи
  2. Узел-координатор отправляет запрос на запись всем узлам реплики одновременно. Количество узлов реплики определяется коэффициентом репликации.
  3. Каждый узел реплики получает запрос на запись и выполняет следующие действия: запись в журнал фиксации, запись в memtable, аннулирование кэша строк и отправка подтверждения на узел-координатор.
  4. Координатор будет ожидать соответствующее количество подтверждений, указанное уровнем согласованности запроса на запись.
  5. Координатор отправит подтверждение клиенту.

Таким образом, в какой-то момент времени во время пути записи ваши данные будут находиться в записываемой таблице, но, поскольку у вас есть rf = 2, это означает, что данные будут находиться в разных записываемых таблицах, поскольку каждая записываемая таблица находится на отдельном узле.

То же самое доступно для сброса nodetool. Данные будут сброшены в разные sstables, поскольку каждый sstable находится на отдельном узле.

...