Your SlideShare is downloading. ×
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
 Евгений Тихонов "Введение в Cassandra". Выступление на Cassandrd conf 2013
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

637

Published on

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

No Downloads
Views
Total Views
637
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Введение в Cassandra
  • 2. Краткая историческая справка • Изначально проект был разработан в недрах Facebook, • в 2009 году передан фонду Apache Software Foundation. Факты: • СУБД Cassandra написана на языке Java, • использует модель хранения данных на базе семейства столбцов.
  • 3. Характеристики • Децентрализованность, • реплицируемость данных (в т. ч. между датацентрами), • масштабируемость, • отказоустойчивость, • язык запросов, • настраиваемая консистентность.
  • 4. Теорема CAP В любой реализации распределённых вычислений возможно обеспечить не более двух из трёх следующих свойств: • согласованность данных (consistency) во всех вычислительных узлах в один момент времени данные не противоречат друг другу; • доступность (availability) любой запрос к распределённой системе завершается корректным откликом; • устойчивость к разделению (partition tolerance) расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.
  • 5. Модель данных
  • 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 •…
  • 14. Архитектура кластера
  • 15. Работа с кластером Token: 0 Token: 30 Token: 10 Клиент совершает запрос к произвольному узлу кластера Token: 25 Token: 15
  • 16. Распределение данных Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  • 17. Распределение данных Russia Token: 0 #1 Token('Russia') = 7 Token: 7 #5 Token: 10 #2 #4 #3 Column1, Column2, Column3, …
  • 18. Распределение данных. Репликация Replication factor = 3 Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  • 19. Распределение данных. Репликация Replication factor = 3 Token: 0 #1 Token: 30 #5 Token: 10 #2 Token: 25 #4 Token: 15 #3
  • 20. Распределение данных. Репликация Russia Token: 0 #1 Column1, Column2, Column3, … Token('Russia') = 7 Token: 7 #5 Token: 10 #2 #4 #3 Replication factor = 3
  • 21. Координатор запросов
  • 22. Координатор запросов Координатор
  • 23. Координатор запросов Клиент Совершает запрос к произвольному узлу Координатор Опрашивает соответствующие узлы-реплики для получения ответа
  • 24. Координатор запросов Клиент совершает запрос к произвольному узлу кластера
  • 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. Координатор запросов Replication factor = 1 RowKey = USA ColumnName = President Value = Obama Timestamp = 2009 #1 #5 #2 #4 #3
  • 27. Координатор запросов Replication factor = 1 RowKey = USA ColumnName = President Value = Obama Timestamp = 2009 #1 #5 #2 #4 #3
  • 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
  • 35. Чтение целой строки USA : { President: { Value: Lincoln, Timestamp: 1865 }, Currency: { Value: USD, Timestamp: 1794 }} USA : { President: { Value: Obama, Timestamp: 2013 }} USA: { President: { … }, Currency: { … } }
  • 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. Процедуры восстановления данных • Read repair При чтении данных более актуальные данные отправляются на узлы-реплики с устаревшими метками. • Hinted handoff Позволяет сохранить данные на координаторе и отправить соответствующему узлу позже, когда это будет возможно. • Anti-entropy node repair Процедура распространения актуальных данных на узлы-реплики, запускаемая вручную.
  • 38. Обработка запросов узлом
  • 39. Основные компоненты узла • MemTable — таблица данных в памяти, которая позволяет мгновенно отдавать данные. Основана на ConcurrentSkipList. • SSTable — таблица сохраненная на диск, которая после записи никогда не модифицируется.
  • 40. Запись значений в узел Запрос от координатора MemTable Запись при наступлении порогового условия SSTables
  • 41. Чтение значений из узла Запрос от координатора MemTable Ответ координатору Объединений колонок строки SSTables
  • 42. Запись значений в узел Запрос от координатора MemTable Запись в CommitLog SSTables
  • 43. Уменьшение IO-операций • Блум-фильтрация При небольших затратах памяти позволяет отвечать на вопрос вхождения ключа в множество ключей сохранённых на диске. Допускает ложноположительные ответы. • Row Cache Кэширует всю строку в памяти. • Key Cache Позволяет по значению ключа строку найти его позицию на диске.
  • 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

×