Cassandra. Часть 4. Writepath

Сохранение Cassandra выполняет в следующем порядке:

  1. На основе ключа записи вычисляются хеш и определяются ноды, куда согласно replciation factor попадут данные;
  2. На репликах запись в commit log;
  3. На репликах запись в memtable в памяти;
  4. На репликах инвалидация кеша;
  5. Ожидание координатором подтверждения записи от реплик;
  6. Отправка ответа клиенту, о том, что запись выполнена;

https://wiki.apache.org/cassandra/WritePathForUsers

Параллельно выполняется процесс, который следит за размером memtable и если он достигает определенного размера, выполянется сброс данных в SSTable на диск;

Commit Log

Самое первое место, куда попадают данные в момент записи в Cassandra - это Commit log. Сommit log - это стандартный механизм для восстановления данных в случае краха. Представляет собой журнал в который данные постоянно дописываются и сохраняются на жесткий диск. Операция записи не считается выполненной пока данные не попадут в commit log. В случае неожиданного отключения сервера, данные будут восстановлены из этого журнала и потери информации не произойдет. По существу, commit log читается только в одном случае - когда произошел сбой.

Memtable

После записи в commit log, данные попадают в оперативную память в структуру под названием memtable. Memtable представляет собой кеш в оперативной памяти ассоциированный с таблицей, в которой данные располагаются в сортированном порядке.

Когда количество данных в memtable достигает определенного порога, она сохраняется на диск в SSTable. А вновь поступающие данные пишутся уже в новую memtable. У одной таблицы в Cassandra может быть несколько еще не записанных на диск таблиц memtable, при этом активная всегда только одна, в нее и пишутся данные. Обычно Cassandra не держит такие memtable долго в памяти и старается сохранить их на диск того, как произойдет переполнение памяти.

Каждой физической таблице соответствует своя отдельная memtable.

SSTable

Данные в SSTable как и в memtable отсортированы как по колонкам, там и по столбцам. Это позволяет быстро находить нужные данные. Так же в SSTable запрещены любые модификации, (иначе, это повлекло за собой совершенно ненужную перезапись всего файла) Можно подытожить ключевые факты которые отличают memtable от SSTable:

  • Memtable располагается в оперативной памяти, а SSTable на диске
  • Memtable модифицируется по мере поступления новых записей, SSTable иммутабельна

Начиная с версии 1.0 каждая SSTable может быть сжата, для экономии места. Также у каждой SSTable есть собственный Bloom filter, который используется для дополнительной эффективности при поиске.

Written on April 10, 2017