Cassandra. Часть 6. Batches

В реляционных базах есть возможность объединения запросов в batch (группу). Обработка таких запросов выполняется быстрее, т.к. отсутствует затраты на передачу по сети множества маленьких отдельных запросов. В Кассандре тоже есть batch’и, но основное предназначение их несколько другое.

Read More

Что хранится в Object Header

У каждого объекта в java, помимо самих полей есть метаданные, которые называются object header. Давайте разберемся, что именно там хранится.

Read More

Обзор Zookeeper

Рассказываю про Zookeper. Описание сервиса и особенностей его работы. Примеры использования Curator Recipes.

Read More

Cassandra. Часть 5. Compaction

Главной причиной высокой скорости записи Cassandra является то, что запись данных последовательна. Данные попадают в оперативную память, сортируются в memtable, а затем блоком, в виде SSTable сбрасываются на диск. Именно благодаря такому подходу, Cassandra приближается тому, что ее производительность при сохранении равна скорости записи диска.

Read More

Cassandra. Часть 4. Writepath

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

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

Шпаргалки Git rebase

Rebase - команда предназначенная для редактирования коммитов в git. Часто ее воспринимают как альтернативу команде git merge, однако это не так. Хотя команда и позволяет переносить коммиты, мержиться все равно придется обычной командой merge.

Read More

Алгоритм consistant hashing & virtual nodes

Cassandra, как и другие NoSQL key-value хранилища, имеет распределенную архитектуру и хранит данные на нескольких серверах. При выполнении записи, БД должна однозначно орпеделять ноду, на которую нужно сохранить данные. Такое же требование касается и чтения, БД, получив ключ документа, должна определить к какой ноде обращаться, чтобы не искать по всем нодам. Поэтому необходим алгоритм выбора нод для чтения/записи, который получивключ записи (key) и вернет адрес ноды. Для того, чтобы этот алгоритм можно было использовать в промышленном решении, определим для него несколько условий:

  • Высокая скорость работы, не меньше 10.000 операций в секунду.
    Операция опеределения ноды очень частая операция, поэтому нельзя в работе подгружать какие-то данные с диска/БД или обращаться по сети в сторонний сервис.
  • Алгоритм должен одинаково работать на всех нодах.
    Запросы на получение данных приходят на все ноды (в materless архитектуре клиент может подключиться к любой ноде), и они самостоятельно должны прийти к верному решению о расположении данных.
  • При добавлении/удалении нод из кластера не должно быть избыточного перемещения данных.
    При добавлении ноды должны перемещаться только данные, необходимые для ее заполнения. Аналогично, при удалении ноды, только ее данные должны распределиться между остальными нодами. Дополнительных, паразитных перемещений данных не должно быть.
Read More

Cassandra. Часть 1. Проектирование данных

Cassandra представляет собой гибрид между key-value хранилищем и колоночно-ориентированной БД. Если к key-value хранилищам она относится за счет того, что у каждой записи обязательно есть первичный ключ (key) и связанное с ним значение (value), то к семейству колоночных - потому, что значение (value) может состоять из большого количества столбцов.

Read More