SlideShare a Scribd company logo
1 of 44
Download to read offline
Введение в Cassandra
Краткая историческая справка
• Изначально проект был разработан в недрах Facebook,
• в 2009 году передан фонду Apache Software Foundation.
Факты:
• СУБД Cassandra написана на языке Java,
• использует модель хранения данных на базе семейства столбцов.
Характеристики
• Децентрализованность,
• реплицируемость данных (в т. ч. между датацентрами),
• масштабируемость,
• отказоустойчивость,
• язык запросов,
• настраиваемая консистентность.
Теорема CAP
В любой реализации распределённых вычислений возможно обеспечить не
более двух из трёх следующих свойств:
• согласованность данных (consistency)

во всех вычислительных узлах в один момент времени данные не противоречат
друг другу;

• доступность (availability)

любой запрос к распределённой системе завершается корректным откликом;

• устойчивость к разделению (partition tolerance)

расщепление распределённой системы на несколько изолированных секций не
приводит к некорректности отклика от каждой из секций.
Модель данных
Модель данных 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
Модель данных 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
Модель данных 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
Модель данных 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
Строка в Cassandra
Отсортированы по ColumnName

Russia

ColumnName: Capital

ColumnName: ISO Code

ColumnName: Currency

Value: Moscow

Value: RU

Value: RUB
Строка в Cassandra. Column timestamps

ColumnName: Capital
Russia

ColumnName: ISO Code

ColumnName: Currency

Value: Moscow

Value: RU

Value: RUB

Timestamp: 1001

Timestamp: 1004

Timestamp: 1002
Строка в Cassandra. Tomb stones

ColumnName: Capital
Russia

ColumnName: ISO Code

ColumnName: Currency

Value: Moscow

Value: RU

TOMBSTONE

Timestamp: 1001

Timestamp: 1004

Timestamp: 1002
Основные запросы
• Чтение колонки в строке по RowKey и ColumnName
• Чтение колонок в строке по RowKey и диапазону имен колонок
• Запись одной или нескольких колонок в строке по RowKey
• Удаление одной или нескольких колонок в строке по RowKey
•…
Архитектура кластера
Работа с кластером
Token: 0

Token: 30
Token: 10

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

Token: 25
Token: 15
Распределение данных
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
#3
Распределение данных. Репликация
Russia
Token: 0
#1

Column1, Column2, Column3, …

Token('Russia') = 7
Token: 7

#5

Token: 10
#2

#4

#3

Replication factor = 3
Координатор запросов
Координатор запросов
Координатор
Координатор запросов

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

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

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

#1

#5
#2

Token: 25
Token('USA') = 23
#4

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

#1

#5
#2

#4

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

#1

#5
#2

#4

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

#1
#5

#2

Token('USA') = 23

Token: 25
#4

Token: 15
#3
Consistency level
• ONE — координатор отправляет запросы всем узлам-реплик,
ожидает ответа от первого же узла и возвращает управление
пользователю,
• TWO — то же самое, но координатор дожидается подтверждения
от двух первых узлов,
• QUORUM — собирается кворум: координатор дожидается
подтверждения записи от более чем половины узлов-реплик, а
именно Round(RF / 2) + 1,
• ALL — координатор дожидается подтверждения от всех узловреплик.
Запись одной колонки в строку
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
Чтение одной колонки из строки
Replication factor = 1
RowKey = USA
ColumnName = President Consistency level = ALL

#1
#5

#2

Token('USA') = 23

Token: 25
#4

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

#1
#5

#2

Token('USA') = 23

Token: 25
#4

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

#1
#5

#2

Token('USA') = 23

Token: 25
#4

Token: 15
#3
Чтение

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

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

Вычисляется наиболее актуальное
значение на основе Timestamp
Чтение целой строки
USA : {
President: {
Value: Lincoln,
Timestamp: 1865
},
Currency: {
Value: USD,
Timestamp: 1794
}}

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

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

USA : {
President: {
Value: Obama,
Timestamp: 2013
} ,
Currency: {
Value: USD,
Timestamp: 1794
}}

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

• Hinted handoff
Позволяет сохранить данные на координаторе и отправить соответствующему
узлу позже, когда это будет возможно.

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

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

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

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

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

Запись в CommitLog

SSTables
Уменьшение IO-операций
• Блум-фильтрация
При небольших затратах памяти позволяет отвечать на вопрос
вхождения ключа в множество ключей сохранённых на диске.
Допускает ложноположительные ответы.
• Row Cache
Кэширует всю строку в памяти.
• Key Cache
Позволяет по значению ключа строку найти его позицию на диске.
Краткая историческая справка
История версий:
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

More Related Content

More from it-people

«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...it-people
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...it-people
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...it-people
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...it-people
 
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИit-people
 
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З..."Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...it-people
 

More from it-people (20)

«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
 
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
 
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З..."Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
 

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