Введение в Cassandra
Краткая историческая справка
• Изначально проект был разработан в недрах Facebook,
• в 2009 году передан фонду Apache Soft...
Характеристики
• Децентрализованность,
• реплицируемость данных (в т. ч. между датацентрами),
• масштабируемость,
• отказо...
Теорема CAP
В любой реализации распределённых вычислений возможно обеспечить не
более двух из трёх следующих свойств:
• со...
Модель данных
Модель данных SQL
Table

Primary key column

Name

Columns

Capital

ISO Code

Currency

USA
Rows

Washington

US

USD

Ru...
Модель данных Cassandra
Column family

Row Keys

Name

Columns

Capital

ISO Code

Currency

USA
Rows

Washington

US

USD...
Модель данных Cassandra
Row Keys

USA

Russia

Canada

China

Capital
Washington
Capital
Moscow
Capital
Ottawa
Capital
Bei...
Модель данных Cassandra. Schema-less
USA

Russia

Canada

China

Capital

Currency

Washington
Capital
Moscow
Capital
Otta...
Строка в Cassandra
Отсортированы по ColumnName

Russia

ColumnName: Capital

ColumnName: ISO Code

ColumnName: Currency

V...
Строка в Cassandra. Column timestamps

ColumnName: Capital
Russia

ColumnName: ISO Code

ColumnName: Currency

Value: Mosc...
Строка в Cassandra. Tomb stones

ColumnName: Capital
Russia

ColumnName: ISO Code

ColumnName: Currency

Value: Moscow

Va...
Основные запросы
• Чтение колонки в строке по RowKey и ColumnName
• Чтение колонок в строке по RowKey и диапазону имен кол...
Архитектура кластера
Работа с кластером
Token: 0

Token: 30
Token: 10

Клиент
совершает запрос к
произвольному узлу кластера

Token: 25
Token: ...
Распределение данных
Token: 0
#1

Token: 30
#5
Token: 10
#2

Token: 25
#4

Token: 15
#3
Распределение данных
Russia
Token: 0
#1

Token('Russia') = 7
Token: 7

#5

Token: 10
#2

#4

#3

Column1, Column2, Column3...
Распределение данных. Репликация
Replication factor = 3

Token: 0
#1

Token: 30
#5
Token: 10
#2

Token: 25
#4
Token: 15
#3
Распределение данных. Репликация
Replication factor = 3

Token: 0
#1

Token: 30
#5
Token: 10
#2

Token: 25
#4

Token: 15
#...
Распределение данных. Репликация
Russia
Token: 0
#1

Column1, Column2, Column3, …

Token('Russia') = 7
Token: 7

#5

Token...
Координатор запросов
Координатор запросов
Координатор
Координатор запросов

Клиент
Совершает запрос
к произвольному узлу

Координатор
Опрашивает соответствующие
узлы-реплики дл...
Координатор запросов

Клиент
совершает запрос к
произвольному узлу кластера
Запись одной колонки в строку
Replication factor = 1
RowKey = USA
ColumnName = President
Value = Obama
Timestamp = 2009

#...
Координатор запросов
Replication factor = 1
RowKey = USA
ColumnName = President
Value = Obama
Timestamp = 2009

#1

#5
#2
...
Координатор запросов
Replication factor = 1
RowKey = USA
ColumnName = President
Value = Obama
Timestamp = 2009

#1

#5
#2
...
Запись одной колонки в строку
Replication factor = 2
RowKey = USA
ColumnName = President
Value = Obama
Timestamp = 2009

#...
Consistency level
• ONE — координатор отправляет запросы всем узлам-реплик,
ожидает ответа от первого же узла и возвращает...
Запись одной колонки в строку
Replication factor = 3
RowKey = USA
ColumnName = President Consistency level = QUORUM
Value ...
Чтение одной колонки из строки
Replication factor = 1
RowKey = USA
ColumnName = President Consistency level = ALL

#1
#5

...
Чтение одной колонки из строки
Replication factor = 2
RowKey = USA
ColumnName = President Consistency level = ALL

#1
#5

...
Чтение одной колонки из строки
Replication factor = 3
RowKey = USA
ColumnName = President Consistency level = QUORUM

#1
#...
Чтение

USA : {
President: {
Value: Obama,
Timestamp: 2009
}}

USA : {
President: {
Value: Lincoln,
Timestamp: 1865
}}

Вы...
Чтение целой строки
USA : {
President: {
Value: Lincoln,
Timestamp: 1865
},
Currency: {
Value: USD,
Timestamp: 1794
}}

US...
Чтение целой строки
USA : {
President: {
Value: Lincoln,
Timestamp: 1865
},
Currency: {
TOMBSTONE
Timestamp: 2008
}}

USA ...
Процедуры восстановления данных
• Read repair
При чтении данных более актуальные данные отправляются на узлы-реплики
с уст...
Обработка запросов узлом
Основные компоненты узла

• MemTable — таблица данных в памяти, которая позволяет
мгновенно отдавать данные. Основана на C...
Запись значений в узел
Запрос от координатора
MemTable

Запись при наступлении
порогового условия

SSTables
Чтение значений из узла
Запрос от координатора
MemTable
Ответ координатору
Объединений колонок строки

SSTables
Запись значений в узел
Запрос от координатора
MemTable

Запись в CommitLog

SSTables
Уменьшение IO-операций
• Блум-фильтрация
При небольших затратах памяти позволяет отвечать на вопрос
вхождения ключа в множ...
Краткая историческая справка
История версий:
0.6, Апрель 2010, integrated caching
0.7, Январь 2011, secondary indexes
1.0,...
Upcoming SlideShare
Loading in...5
×

Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013

685

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
685
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013

  1. 1. Введение в Cassandra
  2. 2. Краткая историческая справка • Изначально проект был разработан в недрах Facebook, • в 2009 году передан фонду Apache Software Foundation. Факты: • СУБД Cassandra написана на языке Java, • использует модель хранения данных на базе семейства столбцов.
  3. 3. Характеристики • Децентрализованность, • реплицируемость данных (в т. ч. между датацентрами), • масштабируемость, • отказоустойчивость, • язык запросов, • настраиваемая консистентность.
  4. 4. Теорема CAP В любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств: • согласованность данных (consistency) во всех вычислительных узлах в один момент времени данные не противоречат друг другу; • доступность (availability) любой запрос к распределённой системе завершается корректным откликом; • устойчивость к разделению (partition tolerance) расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
  5. 5. Модель данных
  6. 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. 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. 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. 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. 10. Строка в Cassandra Отсортированы по ColumnName Russia ColumnName: Capital ColumnName: ISO Code ColumnName: Currency Value: Moscow Value: RU Value: RUB
  11. 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. 12. Строка в Cassandra. Tomb stones ColumnName: Capital Russia ColumnName: ISO Code ColumnName: Currency Value: Moscow Value: RU TOMBSTONE Timestamp: 1001 Timestamp: 1004 Timestamp: 1002
  13. 13. Основные запросы • Чтение колонки в строке по RowKey и ColumnName • Чтение колонок в строке по RowKey и диапазону имен колонок • Запись одной или нескольких колонок в строке по RowKey • Удаление одной или нескольких колонок в строке по RowKey •…
  14. 14. Архитектура кластера
  15. 15. Работа с кластером Token: 0 Token: 30 Token: 10 Клиент совершает запрос к произвольному узлу кластера Token: 25 Token: 15
  16. 16. Распределение данных Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  17. 17. Распределение данных Russia Token: 0 #1 Token('Russia') = 7 Token: 7 #5 Token: 10 #2 #4 #3 Column1, Column2, Column3, …
  18. 18. Распределение данных. Репликация Replication factor = 3 Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  19. 19. Распределение данных. Репликация Replication factor = 3 Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  20. 20. Распределение данных. Репликация Russia Token: 0 #1 Column1, Column2, Column3, … Token('Russia') = 7 Token: 7 #5 Token: 10 #2 #4 #3 Replication factor = 3
  21. 21. Координатор запросов
  22. 22. Координатор запросов Координатор
  23. 23. Координатор запросов Клиент Совершает запрос к произвольному узлу Координатор Опрашивает соответствующие узлы-реплики для получения ответа
  24. 24. Координатор запросов Клиент совершает запрос к произвольному узлу кластера
  25. 25. Запись одной колонки в строку Replication factor = 1 RowKey = USA ColumnName = President Value = Obama Timestamp = 2009 #1 #5 #2 Token: 25 Token('USA') = 23 #4 Token: 15 #3
  26. 26. Координатор запросов Replication factor = 1 RowKey = USA ColumnName = President Value = Obama Timestamp = 2009 #1 #5 #2 #4 #3
  27. 27. Координатор запросов Replication factor = 1 RowKey = USA ColumnName = President Value = Obama Timestamp = 2009 #1 #5 #2 #4 #3
  28. 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. 29. Consistency level • ONE — координатор отправляет запросы всем узлам-реплик, ожидает ответа от первого же узла и возвращает управление пользователю, • TWO — то же самое, но координатор дожидается подтверждения от двух первых узлов, • QUORUM — собирается кворум: координатор дожидается подтверждения записи от более чем половины узлов-реплик, а именно Round(RF / 2) + 1, • ALL — координатор дожидается подтверждения от всех узловреплик.
  30. 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. 31. Чтение одной колонки из строки Replication factor = 1 RowKey = USA ColumnName = President Consistency level = ALL #1 #5 #2 Token('USA') = 23 Token: 25 #4 Token: 15 #3
  32. 32. Чтение одной колонки из строки Replication factor = 2 RowKey = USA ColumnName = President Consistency level = ALL #1 #5 #2 Token('USA') = 23 Token: 25 #4 Token: 15 #3
  33. 33. Чтение одной колонки из строки Replication factor = 3 RowKey = USA ColumnName = President Consistency level = QUORUM #1 #5 #2 Token('USA') = 23 Token: 25 #4 Token: 15 #3
  34. 34. Чтение USA : { President: { Value: Obama, Timestamp: 2009 }} USA : { President: { Value: Lincoln, Timestamp: 1865 }} Вычисляется наиболее актуальное значение на основе Timestamp
  35. 35. Чтение целой строки USA : { President: { Value: Lincoln, Timestamp: 1865 }, Currency: { Value: USD, Timestamp: 1794 }} USA : { President: { Value: Obama, Timestamp: 2013 }} USA: { President: { … }, Currency: { … } }
  36. 36. Чтение целой строки USA : { President: { Value: Lincoln, Timestamp: 1865 }, Currency: { TOMBSTONE Timestamp: 2008 }} USA : { President: { Value: Obama, Timestamp: 2013 } , Currency: { Value: USD, Timestamp: 1794 }} USA: { President: { … } }
  37. 37. Процедуры восстановления данных • Read repair При чтении данных более актуальные данные отправляются на узлы-реплики с устаревшими метками. • Hinted handoff Позволяет сохранить данные на координаторе и отправить соответствующему узлу позже, когда это будет возможно. • Anti-entropy node repair Процедура распространения актуальных данных на узлы-реплики, запускаемая вручную.
  38. 38. Обработка запросов узлом
  39. 39. Основные компоненты узла • MemTable — таблица данных в памяти, которая позволяет мгновенно отдавать данные. Основана на ConcurrentSkipList. • SSTable — таблица сохраненная на диск, которая после записи никогда не модифицируется.
  40. 40. Запись значений в узел Запрос от координатора MemTable Запись при наступлении порогового условия SSTables
  41. 41. Чтение значений из узла Запрос от координатора MemTable Ответ координатору Объединений колонок строки SSTables
  42. 42. Запись значений в узел Запрос от координатора MemTable Запись в CommitLog SSTables
  43. 43. Уменьшение IO-операций • Блум-фильтрация При небольших затратах памяти позволяет отвечать на вопрос вхождения ключа в множество ключей сохранённых на диске. Допускает ложноположительные ответы. • Row Cache Кэширует всю строку в памяти. • Key Cache Позволяет по значению ключа строку найти его позицию на диске.
  44. 44. Краткая историческая справка История версий: 0.6, Апрель 2010, integrated caching 0.7, Январь 2011, secondary indexes 1.0, Октябрь 2011, integrated compression 1.1, Апрель 2012, self-tuning caches, row-level isolation, CQL 1.2, Январь 2013, atomic batches 2.0, Сентябрь 2013, lightweight transactions, triggers
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×