2. Краткая историческая справка
• Изначально проект был разработан в недрах Facebook,
• в 2009 году передан фонду Apache Software Foundation.
Факты:
• СУБД Cassandra написана на языке Java,
• использует модель хранения данных на базе семейства столбцов.
4. Теорема CAP
В любой реализации распределённых вычислений возможно обеспечить не
более двух из трёх следующих свойств:
• согласованность данных (consistency)
во всех вычислительных узлах в один момент времени данные не противоречат
друг другу;
• доступность (availability)
любой запрос к распределённой системе завершается корректным откликом;
• устойчивость к разделению (partition tolerance)
расщепление распределённой системы на несколько изолированных секций не
приводит к некорректности отклика от каждой из секций.
6. Модель данных SQL
Table
Primary key column
Name
Columns
Capital
ISO Code
Currency
USA
Rows
Washington
US
USD
Russia
Moscow
RU
RUB
Canada
Ottawa
CA
CAD
China
Beijing
CN
CNY
7. Модель данных Cassandra
Column family
Row Keys
Name
Columns
Capital
ISO Code
Currency
USA
Rows
Washington
US
USD
Russia
Moscow
RU
RUB
Canada
Ottawa
CA
CAD
China
Beijing
CN
CNY
8. Модель данных Cassandra
Row Keys
USA
Russia
Canada
China
Capital
Washington
Capital
Moscow
Capital
Ottawa
Capital
Beijing
ISO Code
US
ISO Code
RU
ISO Code
CA
ISO Code
CN
Currency
USD
Currency
RUB
Currency
CAD
Currency
CNY
9. Модель данных Cassandra. Schema-less
USA
Russia
Canada
China
Capital
Currency
Washington
Capital
Moscow
Capital
Ottawa
USD
ISO Code
RU
Currency
RUB
ISO Code
CA
Currency
CAD
Capital
Beijing
Currency
CNY
Time zone
UTC+8
10. Строка в Cassandra
Отсортированы по ColumnName
Russia
ColumnName: Capital
ColumnName: ISO Code
ColumnName: Currency
Value: Moscow
Value: RU
Value: RUB
11. Строка в Cassandra. Column timestamps
ColumnName: Capital
Russia
ColumnName: ISO Code
ColumnName: Currency
Value: Moscow
Value: RU
Value: RUB
Timestamp: 1001
Timestamp: 1004
Timestamp: 1002
12. Строка в Cassandra. Tomb stones
ColumnName: Capital
Russia
ColumnName: ISO Code
ColumnName: Currency
Value: Moscow
Value: RU
TOMBSTONE
Timestamp: 1001
Timestamp: 1004
Timestamp: 1002
13. Основные запросы
• Чтение колонки в строке по RowKey и ColumnName
• Чтение колонок в строке по RowKey и диапазону имен колонок
• Запись одной или нескольких колонок в строке по RowKey
• Удаление одной или нескольких колонок в строке по RowKey
•…
28. Запись одной колонки в строку
Replication factor = 2
RowKey = USA
ColumnName = President
Value = Obama
Timestamp = 2009
#1
#5
#2
Token('USA') = 23
Token: 25
#4
Token: 15
#3
29. Consistency level
• ONE — координатор отправляет запросы всем узлам-реплик,
ожидает ответа от первого же узла и возвращает управление
пользователю,
• TWO — то же самое, но координатор дожидается подтверждения
от двух первых узлов,
• QUORUM — собирается кворум: координатор дожидается
подтверждения записи от более чем половины узлов-реплик, а
именно Round(RF / 2) + 1,
• ALL — координатор дожидается подтверждения от всех узловреплик.
30. Запись одной колонки в строку
Replication factor = 3
RowKey = USA
ColumnName = President Consistency level = QUORUM
Value = Obama
Timestamp = 2009
#1
#5
#2
Token('USA') = 23
Token: 25
#4
Token: 15
#3
31. Чтение одной колонки из строки
Replication factor = 1
RowKey = USA
ColumnName = President Consistency level = ALL
#1
#5
#2
Token('USA') = 23
Token: 25
#4
Token: 15
#3
32. Чтение одной колонки из строки
Replication factor = 2
RowKey = USA
ColumnName = President Consistency level = ALL
#1
#5
#2
Token('USA') = 23
Token: 25
#4
Token: 15
#3
33. Чтение одной колонки из строки
Replication factor = 3
RowKey = USA
ColumnName = President Consistency level = QUORUM
#1
#5
#2
Token('USA') = 23
Token: 25
#4
Token: 15
#3
34. Чтение
USA : {
President: {
Value: Obama,
Timestamp: 2009
}}
USA : {
President: {
Value: Lincoln,
Timestamp: 1865
}}
Вычисляется наиболее актуальное
значение на основе Timestamp
37. Процедуры восстановления данных
• Read repair
При чтении данных более актуальные данные отправляются на узлы-реплики
с устаревшими метками.
• Hinted handoff
Позволяет сохранить данные на координаторе и отправить соответствующему
узлу позже, когда это будет возможно.
• Anti-entropy node repair
Процедура распространения актуальных данных на узлы-реплики,
запускаемая вручную.
39. Основные компоненты узла
• MemTable — таблица данных в памяти, которая позволяет
мгновенно отдавать данные. Основана на ConcurrentSkipList.
• SSTable — таблица сохраненная на диск, которая после записи
никогда не модифицируется.
40. Запись значений в узел
Запрос от координатора
MemTable
Запись при наступлении
порогового условия
SSTables
41. Чтение значений из узла
Запрос от координатора
MemTable
Ответ координатору
Объединений колонок строки
SSTables
42. Запись значений в узел
Запрос от координатора
MemTable
Запись в CommitLog
SSTables
43. Уменьшение IO-операций
• Блум-фильтрация
При небольших затратах памяти позволяет отвечать на вопрос
вхождения ключа в множество ключей сохранённых на диске.
Допускает ложноположительные ответы.
• Row Cache
Кэширует всю строку в памяти.
• Key Cache
Позволяет по значению ключа строку найти его позицию на диске.