SlideShare a Scribd company logo
1 of 58
Bigtable-подобные
хранилища: Cassandra
Поляков Андрей
КЭ-220
Elevator Pitch (40 слов)
Apache Cassandra – открытая,
распределенная, децентрализованная,
эластично масштабируемая,
высокодоступная, отказоустойчивая,
строковая, допускающая настройку
согласованности СУБД, дизайн
распределенности которой основан на
Amazon Dynamo, а модель данных – на
Google BigTable. Разработана в Facebook,
ныне используется на некоторых из
наиболее популярных веб-сайтов.
Poliakov Andrei: 2018 2
Основная информация
Apache Cassandra
Первый выпуск 2008
Написана на Java
Разработчик Изначально Facebook, затем передана в Apache Software
Foundation (компания DataStax)
Используется в Constant Contact, CERN, Comcast, eBay,GitHub, GoDaddy, Hulu, I
nstagram, Intuit, Netflix, Reddit, The Weather Channel, and over
1500 more companies that have large, active data sets.
Последняя версия 3.11.3 (31 июля 2018)
Сайт cassandra.apache.org
Poliakov Andrei: 2018 3
Соответствие CAP:
Poliakov Andrei: 2018 4
Для кого подходит Cassandra?
• Крупное развертывание
• Много операций записи, статистика, анализ
• Территориальная разнесенность
• Быстро эволюционирующие приложения
Poliakov Andrei: 2018 5
Что взяли из Dynamo?
• Token ring
• Алгоритм записи/чтения
Poliakov Andrei: 2018 6
Что взяли из BigTable?
• Модель данных key/column
• Локальную структуру данных на серверах
• Memtable/commit log – временное хранилище
• SSTable/Bloomfilter – постоянное хранилище
• Вместо put/get доступны сложные запросы:
SELECT WHERE key >= start AND key <= end AND columnName >= c1
AND columnName <= c2
• Индексы
Poliakov Andrei: 2018 7
Курс
молодого
бойца
Poliakov Andrei: 2018 8
Модель данных Cassandra
Таблица
Строка
Первичный ключ
Столбец 1
Значение 1
Столбец 2
Значение 2
Столбец 3
Значение 3
Строка
Первичный ключ
Столбец 1
Значение 1
Столбец 4
Значение 4
Poliakov Andrei: 2018 9
Таблица
Широкая строка
Широкая строка в cassandra
Ключ
раздела
Статический
столбец
Значение
Кластерный
ключ
Значение
Столбец
Значение
Кластерный
ключ
Значение
Столбец
Значение
Широкая строка
Ключ
раздела
Статический
столбец
Значение
Кластерный
ключ
Значение
Столбец
Значение
Столбец
Значение
Poliakov Andrei: 2018 10
Кольцо токенов и репликация
Poliakov Andrei: 2018 11
Запись
• Команда идет на произвольный сервер в кластере. Сервер
находит нужные реплики (ReplicationStrategy)
• Сервер сохраняет данные локально (Hinted handoff)
• Критерий успешности записи определяет клиент согласно
настройки ConsistencyLevel
Уровень Что значит
ANY Начальный сервер (Hinted Handoff)
ONE Хотя бы одна реплика
QUORUM (ReplicationFactor / 2) + 1
ALL Все реплики
Poliakov Andrei: 2018 12
Хранение данных
Узел Cassandra
Демон Cassandra (JVM)
Таблицы в памяти Кэши ключей Кэши строк
Диск
Журналы фиксаций Файлы SSTable Напоминания (2.2+)
Poliakov Andrei: 2018 13
Запись: внутренности
• Memtable: хранилище новых записей. Настраиваемый flush-
критерий (по таймауту, по размеру)
• Commit-log: дублирует memtable на случай падения сервера.
• Memtable flush -> SSTable
• SSTable: data + index + bloomfilter
• SSTable compaction – борьба с фрагментацией
Poliakov Andrei: 2018 14
Чтение
• Команду на чтение обрабатывает произвольный сервер
• Сервер определяет ближайшую реплику на основе настройки
snitch: Simple, Topology, Dynamic
• Клиент определяет критерий успешности чтения
• Read repair (optional): убедиться, что все реплики содержат
свежие данные
Уровень Что значит
ONE Хотя бы одна реплика
QUORUM (ReplicationFactor / 2) + 1
ALL Все реплики
Poliakov Andrei: 2018 15
Конфликты
• Каждое значение в колонке имеет timestamp
• Timestamp поставляется клиентом как текущее время
• Можно переопределить timestamp на любое 64-х битное число
• Клиент получает всегда последний timestamp
Poliakov Andrei: 2018 16
Кэширование запросов
• Key cache: кеширование позиции ключей внутри SSTable
• Row cache: кеширование ключей и их значений в памяти
• Принцип кеширования: LIFO. Настраивается для каждой таблицы
отдельно.
• Настройки кеширования использовать не рекомендуется. Лучше
полагаться на кеширование файловой системы (в ОС есть mmap
кэш, который использует Cassandra).
Poliakov Andrei: 2018 17
Индексы
• Secondary indexes: на columns:
CREATE INDEX <name> ON <table_name(<column_name>)
• При полностью распределенной архитектуре сложно реализовать
индексы
• Чтобы найти значение по индексу, нужно опросить все сервера
• Ограничение реализации: можно делать запросы только по
строгому сравнению* (SELECT … WHERE column >value – не
поддерживается)
• Индексы сильно замедляют вставку данных
• Итого: индексы довольно бесполезная фича
* SASI индексы (разработаны Apple) включенные в Cassandra 3.4 поддерживают сравнение на
больше/меньше и LIKE. SASI хранятся как часть каждого файла SSTable, а не в отдельной «скрытой»
таблице как оригинальные индексы Cassandra. Poliakov Andrei: 2018 18
CRUD операции: пример
Poliakov Andrei: 2018 19
Коллекции
• Множество
• Список
• Карта
Poliakov Andrei: 2018 20
Пользовательские типы
1. CREATE TYPE address (
... street text,
... city text,
... state text,
... zip_code int);
2. ALTER TABLE user ADD addresses map<text,
frozen<address>>;
3. UPDATE user SET adresses = adresses + {'home' : {street:
'Lenina street', city: 'Chelyabinsk', state: 'Chelyabinsk oblast',
zip_code: 454130}} WHERE first_name = 'Bill';
2. ALTER TABLE user ADD addresses map<text, address>;
Poliakov Andrei: 2018 21
TTL (время жизни столбца) и временные метки
• Возможность задать срок хранения данных, необходимость в которых
отпала (работает на уровне значений отдельных столбцов).
UPDATE user USING TTL 3600 SET last_name = ‘McDonald’ WHERE
fisrt_name = ‘Robin’;
SELECT first_name, last_name, TTL(last_name) FROM user;
• Всякий раз, как мы записываем данные, Cassandra генерирует
временную метку для каждого обновленного столбца (в общем случае
сохраняется изменение с самой поздней временной меткой)
SELECT writetime(first_name) FROM user;
SELECT writetime(second_name) FROM user;
Poliakov Andrei: 2018 22
Путь сенсея
Poliakov Andrei: 2018 23
Создание и настройка кластера (практика)
• На примере ccm:
• Создание кластера
• Добавление узлов и пересчет токенов
• Динамическое добавление узлов (выход узлов из строя и
возвращение в кластер)
Poliakov Andrei: 2018 24
Мониторинг (JMX) (практика)
• Сервер
• Порт
Poliakov Andrei: 2018 25
Легковесные транзакции (LWT)
• Традиционный подход: распределенные транзакции и
двухфазная фиксация.
• Что делать, когда строгой согласованности мало для
предотвращения состояния гонки в случаях, когда клиент должен
сначала прочитать, а затем записать данные? Нужна
линеаризуемая согласованность (в терминах ACID –
последовательный уровень изоляции).
Poliakov Andrei: 2018 26
Легковесные транзакции (LWT)
• Paxos
Poliakov Andrei: 2018 27
Легковесные транзакции (LWT)
• Расширяем Paxos:
для успешного завершения
транзакции необходимы четыре
раунда коммуникации между
координатором и репликами.
1) подготовка/обещание
2) чтение/результаты
3) предложение/принятие
4) фиксация/подтверждение
Poliakov Andrei: 2018 28
Легковесные транзакции (LWT)
• Пример 1: регистрируем пользователя
INSERT INTO USERS (login, email, name, login_count)
values ('jbellis', 'jbellis@datastax.com', 'Jonathan Ellis', 1)
IF NOT EXISTS
• Пример 2: сбрасываем пароль:
UPDATE users
SET reset_token = null, password = 'newpassword'
WHERE login = 'jbellis'
IF reset_token = 'some-generated-reset-token'
Poliakov Andrei: 2018 29
Материализованные представления
CREATE MATERIALIZED VIEW <view_name>
AS SELECT *
FROM <base_table_name>
WHERE k1 IS NOT NULL AND … kn IS NOT NULL
AND custom_column IS NOT NULL
PRIMARY KEY (custom_column, k1, …, kn);
Poliakov Andrei: 2018 30
Масштабирование: как добавить сервера в
кластер?
• У каждого сервера есть операция move token. Можно
переназначить token у любого сервера
• Топология кластера изменится, миграция данных будет
происходить в фоне
• Пока миграция не закончена, сервер будет отвечать за старый
кусок данных
• Аналогично будет отработана ситуация добавления нового
сервера в token ring
Poliakov Andrei: 2018 31
Стратегии репликации
• Первая реплика всегда хранится в узле, которому принадлежит
диапазон, куда попал маркер, а местоположение остальных
реплик определяется стратегией репликации:
• AbstractReplicationStrategy
• SimpleStrategy
• TopologyStrategy
• OldNetworkTopologyStrategy
Poliakov Andrei: 2018 32
Многоступенчатая событийно-
ориентированная архитектура (SEDA)
• Операция может начаться в одном потоке, затем продолжиться в другом,
который может передать работу другому потоку.
• Работа разбивается на ступени (stage) и ход выполнения определяет пул
потоков (java,util.concurrent.ExecutorService), ассоциированный со ступенью.
• Ступень состоит из входящей очереди событий, обработчика событий и
ассоциированного пула потоков. Ступени управляются контроллером,
который отвечает за планирование и выделение потоков.
Примеры:
• Чтение (локальное чтение)
• Изменение (локальная запись)
• Исправления на этапе чтения
• Миграция (внесение изменений в схему)
• Вручение напоминаний
Poliakov Andrei: 2018 33
Преимущества
• Быстрый write, особенно когда не нужна consistency.
• Легкость в администрировании. Один демон (daemon) с одним
конфигурационным файлом.
• Распределенность, устойчивость к разрывам сети
• Высокая доступность
Poliakov Andrei: 2018 34
Недостатки
• Плохо реализован range scan: кассандра не умеет передавать
данные поточно.
• Слишком много настроек вынесено на cluster level: вид и
стратегия хранения ключей и т.д.
• В старых версиях: протокол общения между нодами Thrift
Poliakov Andrei: 2018 35
Вопросы?
Poliakov Andrei: 2018 36
Вопрос 1: Выберите верные утверждения
В Cassandra нет схемы данных
Cassandra поддерживает гибкую схему данных
API, основанный на Thrift является рекомендуемым
Рекомендуется использовать CQL
Poliakov Andrei: 2018 37
Вопрос 1: Выберите верные утверждения
В Cassandra нет схемы данных
Cassandra поддерживает гибкую схему данных
API, основанный на Thrift является рекомендуемым
Рекомендуется использовать CQL
Poliakov Andrei: 2018 38
Вопрос 2: Что будет выведено в результате
запроса ”SELECT * FROM user WHERE
second_name = ‘Gates’“?
Таблица создана запросом: CREATE TABLE user (first_name text, second_name
text, PRIMARY KEY (first_name));
В таблицу вставлены данные: {Bill Gates, Steve Jobs}
ofirst_name | second_name
------------+-------------
Bill | Gates
oБудет ошибка, т.к. не созданы вторичные индексы
ofirst_name | second_name
------------+-------------
oБудет ошибка, т.к. не создано материализованное представление
Poliakov Andrei: 2018 39
Вопрос 2: Что будет выведено в результате
запроса ”SELECT * FROM user WHERE
second_name = ‘Gates’“?
Таблица создана запросом: CREATE TABLE user (first_name text, second_name
text, PRIMARY KEY (first_name));
В таблицу вставлены данные: {Bill Gates, Steve Jobs}
ofirst_name | second_name
------------+-------------
Bill | Gates
oБудет ошибка, т.к. не созданы вторичные индексы
ofirst_name | second_name
------------+-------------
oБудет ошибка, т.к. не создано материализованное представление
Poliakov Andrei: 2018 40
Вопрос 3: Какой уровень согласованности
данных поддерживается в Cassandra?
oСлабая согласованность (в конечном счете)
oНастраиваемый уровень согласованности
oСтрогая согласованность
oПричинно-следственная согласованность
Poliakov Andrei: 2018 41
Вопрос 3: Какой уровень согласованности
данных используется в Cassandra?
oСлабая согласованность (в конечном счете)
oНастраиваемый уровень согласованности
oСтрогая согласованность
oПричинно-следственная согласованность
Poliakov Andrei: 2018 42
Вопрос 4: Согласованность «в конечном
счете» означает:
oВсе обновления рано или поздно распространятся во все реплики
и реплики станут согласованными
oПоследовательная согласованность
oСтрогая согласованность
oСогласованным считается самое последнее записанное значение
Poliakov Andrei: 2018 43
Вопрос 4: Согласованность «в конечном
счете» означает:
oВсе обновления рано или поздно распространятся во все реплики
и реплики станут согласованными
oПоследовательная согласованность
oСтрогая согласованность
oСогласованным считается самое последнее записанное значение
Poliakov Andrei: 2018 44
Вопрос 5: Как создать вторичный индекс?
oCREATE INDEX <name> ON table_name(column_name);
oCREATE CUSTOM INDEX <name> ON table_name(column_name);
oCREATE SECONDARY INDEX <name> ON table_name(column_name);
oCREATE CUSTOM INDEX <name> ON table_name(column_name)
USING ‘org.apache.Cassandra.index.sasi.SASIIndex’;
Poliakov Andrei: 2018 45
Вопрос 5: Как создать вторичный индекс?
oCREATE INDEX <name> ON table_name(column_name);
oCREATE CUSTOM INDEX <name> ON table_name(column_name);
oCREATE SECONDARY INDEX <name> ON table_name(column_name);
oCREATE CUSTOM INDEX <name> ON table_name(column_name)
USING ‘org.apache.Cassandra.index.sasi.SASIIndex’;
Poliakov Andrei: 2018 46
Вопрос 6: Имеется пользовательский тип
address. Что произойдет при попытке добавить
колонку в таблицу: ALTER TABLE user ADD
addresses map<text, address>;
Таблица создана запросом: CREATE TABLE user (first_name text,
second_name text, PRIMARY KEY (first_name));
oКолонка будет успешно добавлена в таблицу
oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) не
заморожена
oБудет ошибка, т.к. вложенная коллекция (пользовательский тип)
заморожена
oБудет ошибка, т.к. не создано материализованное представление
для пользовательского типаPoliakov Andrei: 2018 47
Вопрос 6: Имеется пользовательский тип
address. Что произойдет при попытке добавить
колонку в таблицу: ALTER TABLE user ADD
addresses map<text, address>;
Таблица создана запросом: CREATE TABLE user (first_name text,
second_name text, PRIMARY KEY (first_name));
oКолонка будет успешно добавлена в таблицу
oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) не
заморожена
oБудет ошибка, т.к. вложенная коллекция (пользовательский тип)
заморожена
oБудет ошибка, т.к. не создано материализованное представление
для пользовательского типаPoliakov Andrei: 2018 48
Вопрос 7: Какую согласованность мы получим,
если укажем при запросе уровень
согласованности равным коэффициенту
репликации?
oСтрогую
oВ конечном счете
oНикакую
oЖелезную
Poliakov Andrei: 2018 49
Вопрос 7: Какую согласованность мы получим,
если укажем при запросе уровень
согласованности равным коэффициенту
репликации?
oСтрогую
oВ конечном счете
oНикакую
oЖелезную
Poliakov Andrei: 2018 50
Вопрос 8: Какие ограничения накладываются на
материализованное представление?
oВ первичный ключ материализованного представления нельзя
включать несколько столбцов, не входящих в состав первичного
ключа базовой таблицы
oМатериализованные представления можно создавать только для
таблиц, не содержащих кластерные столбцы
oОграничения для материализованных представлений аналогичны
ограничениям при создании обычных таблиц
oНельзя использовать агрегаты
Poliakov Andrei: 2018 51
Вопрос 8: Какие ограничения накладываются на
материализованное представление?
oВ первичный ключ материализованного представления нельзя
включать несколько столбцов, не входящих в состав первичного
ключа базовой таблицы
oМатериализованные представления можно создавать только для
таблиц, не содержащих кластерные столбцы
oОграничения для материализованных представлений аналогичны
ограничениям при создании обычных таблиц
oНельзя использовать агрегаты
Poliakov Andrei: 2018 52
Вопрос 9: Коэффициент репликации
задается:
oОдин раз для каждой таблицы
oКлиентом в каждом запросе
oОдин раз для всего пространства ключей
oКлиентом в каждом запросе на обновление таблицы
Poliakov Andrei: 2018 53
Вопрос 9: Коэффициент репликации
задается:
oОдин раз для каждой таблицы
oКлиентом в каждом запросе
oОдин раз для всего пространства ключей
oКлиентом в каждом запросе на обновление таблицы
Poliakov Andrei: 2018 54
Вопрос 10: Почему Cassandra не стоит
использовать в качестве очереди:
Очередь схожа с паттерном временных рядов
Растущее число «надгробий» отрицательно сказывается на
производительности
Удаленные элементы не исчезают из таблицы и нужно
пропустить, чтобы добраться до начала очереди
Элементы очереди нельзя изменять
Poliakov Andrei: 2018 55
Вопрос 10: Почему Cassandra не стоит
использовать в качестве очереди:
Очередь схожа с паттерном временных рядов
Растущее число «надгробий» отрицательно сказывается на
производительности
Удаленные элементы не исчезают из таблицы и нужно
пропустить, чтобы добраться до начала очереди
Элементы очереди нельзя изменять
Poliakov Andrei: 2018 56
Вопрос 11: Что будет выведено по запросу
SELECT * FROM user WHERE first_name = 'Bill’; ?
Таблица создана запросом: CREATE TABLE user (first_name text, second_name
text, PRIMARY KEY (first_name));
В таблицу вставлены данные: {Bill Gates, Steve Jobs}
Выполнен запрос DELETE second_name FROM user WHERE first_name = ‘Bill’;
ofirst_name | second_name
------------+-------------
Bill | null
oБудет ошибка, т.к. не созданы вторичные индексы
ofirst_name | second_name
------------+-------------
ofirst_name |
------------|
Bill | Poliakov Andrei: 2018 57
Вопрос 11: Что будет выведено по запросу
SELECT * FROM user WHERE first_name = 'Bill’; ?
Таблица создана запросом: CREATE TABLE user (first_name text, second_name
text, PRIMARY KEY (first_name));
В таблицу вставлены данные: {Bill Gates, Steve Jobs}
Выполнен запрос DELETE second_name FROM user WHERE first_name = ‘Bill’;
ofirst_name | second_name
------------+-------------
Bill | null
oБудет ошибка, т.к. не созданы вторичные индексы
ofirst_name | second_name
------------+-------------
ofirst_name |
------------|
Bill | Poliakov Andrei: 2018 58

More Related Content

What's hot

Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Fwdays
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Ontico
 
Алексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеАлексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеVolha Banadyseva
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache CassandraAlexander Tivelkov
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахDmitry Buzdin
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахAlexander Mezhov
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7Dima Dzuba
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)Ontico
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)Ontico
 
Tuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationTuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationShamim bhuiyan
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovJavaDayUA
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 

What's hot (19)

Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
Алексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проектеАлексей Чумаков. Apache Cassandra на реальном проекте
Алексей Чумаков. Apache Cassandra на реальном проекте
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache Cassandra
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Cassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системахCassandra: быстрая запись данных в высоконагруженных системах
Cassandra: быстрая запись данных в высоконагруженных системах
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
 
Tfs reports customization
Tfs reports customizationTfs reports customization
Tfs reports customization
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
 
Tuning HighLoad J2EE web application
Tuning HighLoad J2EE web applicationTuning HighLoad J2EE web application
Tuning HighLoad J2EE web application
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 

Similar to Cassandra db

Предоставление баз данных в виде сервиса (DBaaS)
Предоставление баз данных в виде сервиса (DBaaS)Предоставление баз данных в виде сервиса (DBaaS)
Предоставление баз данных в виде сервиса (DBaaS)Andrey Akulov
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреСХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреDEPO Computers
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Mikhail Chusavitin
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3Dima Dzuba
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияCisco Russia
 
Из чего строят облака? Продукты Citrix
Из чего строят облака? Продукты CitrixИз чего строят облака? Продукты Citrix
Из чего строят облака? Продукты CitrixSergey Khalyapin
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...DEPO Computers
 
Andrii Bereznikov ITEM 2018
Andrii Bereznikov ITEM 2018Andrii Bereznikov ITEM 2018
Andrii Bereznikov ITEM 2018ITEM
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStackIlya Alekseyev
 
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Cisco Russia
 

Similar to Cassandra db (20)

Предоставление баз данных в виде сервиса (DBaaS)
Предоставление баз данных в виде сервиса (DBaaS)Предоставление баз данных в виде сервиса (DBaaS)
Предоставление баз данных в виде сервиса (DBaaS)
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуреСХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
СХД DEPO Storage 4600 для консолидации данных в современной IT-инфраструктуре
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
Телеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использованияТелеметрия. Обзор технологии и сценарии ее использования
Телеметрия. Обзор технологии и сценарии ее использования
 
Из чего строят облака? Продукты Citrix
Из чего строят облака? Продукты CitrixИз чего строят облака? Продукты Citrix
Из чего строят облака? Продукты Citrix
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
 
Andrii Bereznikov ITEM 2018
Andrii Bereznikov ITEM 2018Andrii Bereznikov ITEM 2018
Andrii Bereznikov ITEM 2018
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStack
 
Cassandra
CassandraCassandra
Cassandra
 
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
 

Cassandra db

  • 2. Elevator Pitch (40 слов) Apache Cassandra – открытая, распределенная, децентрализованная, эластично масштабируемая, высокодоступная, отказоустойчивая, строковая, допускающая настройку согласованности СУБД, дизайн распределенности которой основан на Amazon Dynamo, а модель данных – на Google BigTable. Разработана в Facebook, ныне используется на некоторых из наиболее популярных веб-сайтов. Poliakov Andrei: 2018 2
  • 3. Основная информация Apache Cassandra Первый выпуск 2008 Написана на Java Разработчик Изначально Facebook, затем передана в Apache Software Foundation (компания DataStax) Используется в Constant Contact, CERN, Comcast, eBay,GitHub, GoDaddy, Hulu, I nstagram, Intuit, Netflix, Reddit, The Weather Channel, and over 1500 more companies that have large, active data sets. Последняя версия 3.11.3 (31 июля 2018) Сайт cassandra.apache.org Poliakov Andrei: 2018 3
  • 5. Для кого подходит Cassandra? • Крупное развертывание • Много операций записи, статистика, анализ • Территориальная разнесенность • Быстро эволюционирующие приложения Poliakov Andrei: 2018 5
  • 6. Что взяли из Dynamo? • Token ring • Алгоритм записи/чтения Poliakov Andrei: 2018 6
  • 7. Что взяли из BigTable? • Модель данных key/column • Локальную структуру данных на серверах • Memtable/commit log – временное хранилище • SSTable/Bloomfilter – постоянное хранилище • Вместо put/get доступны сложные запросы: SELECT WHERE key >= start AND key <= end AND columnName >= c1 AND columnName <= c2 • Индексы Poliakov Andrei: 2018 7
  • 9. Модель данных Cassandra Таблица Строка Первичный ключ Столбец 1 Значение 1 Столбец 2 Значение 2 Столбец 3 Значение 3 Строка Первичный ключ Столбец 1 Значение 1 Столбец 4 Значение 4 Poliakov Andrei: 2018 9
  • 10. Таблица Широкая строка Широкая строка в cassandra Ключ раздела Статический столбец Значение Кластерный ключ Значение Столбец Значение Кластерный ключ Значение Столбец Значение Широкая строка Ключ раздела Статический столбец Значение Кластерный ключ Значение Столбец Значение Столбец Значение Poliakov Andrei: 2018 10
  • 11. Кольцо токенов и репликация Poliakov Andrei: 2018 11
  • 12. Запись • Команда идет на произвольный сервер в кластере. Сервер находит нужные реплики (ReplicationStrategy) • Сервер сохраняет данные локально (Hinted handoff) • Критерий успешности записи определяет клиент согласно настройки ConsistencyLevel Уровень Что значит ANY Начальный сервер (Hinted Handoff) ONE Хотя бы одна реплика QUORUM (ReplicationFactor / 2) + 1 ALL Все реплики Poliakov Andrei: 2018 12
  • 13. Хранение данных Узел Cassandra Демон Cassandra (JVM) Таблицы в памяти Кэши ключей Кэши строк Диск Журналы фиксаций Файлы SSTable Напоминания (2.2+) Poliakov Andrei: 2018 13
  • 14. Запись: внутренности • Memtable: хранилище новых записей. Настраиваемый flush- критерий (по таймауту, по размеру) • Commit-log: дублирует memtable на случай падения сервера. • Memtable flush -> SSTable • SSTable: data + index + bloomfilter • SSTable compaction – борьба с фрагментацией Poliakov Andrei: 2018 14
  • 15. Чтение • Команду на чтение обрабатывает произвольный сервер • Сервер определяет ближайшую реплику на основе настройки snitch: Simple, Topology, Dynamic • Клиент определяет критерий успешности чтения • Read repair (optional): убедиться, что все реплики содержат свежие данные Уровень Что значит ONE Хотя бы одна реплика QUORUM (ReplicationFactor / 2) + 1 ALL Все реплики Poliakov Andrei: 2018 15
  • 16. Конфликты • Каждое значение в колонке имеет timestamp • Timestamp поставляется клиентом как текущее время • Можно переопределить timestamp на любое 64-х битное число • Клиент получает всегда последний timestamp Poliakov Andrei: 2018 16
  • 17. Кэширование запросов • Key cache: кеширование позиции ключей внутри SSTable • Row cache: кеширование ключей и их значений в памяти • Принцип кеширования: LIFO. Настраивается для каждой таблицы отдельно. • Настройки кеширования использовать не рекомендуется. Лучше полагаться на кеширование файловой системы (в ОС есть mmap кэш, который использует Cassandra). Poliakov Andrei: 2018 17
  • 18. Индексы • Secondary indexes: на columns: CREATE INDEX <name> ON <table_name(<column_name>) • При полностью распределенной архитектуре сложно реализовать индексы • Чтобы найти значение по индексу, нужно опросить все сервера • Ограничение реализации: можно делать запросы только по строгому сравнению* (SELECT … WHERE column >value – не поддерживается) • Индексы сильно замедляют вставку данных • Итого: индексы довольно бесполезная фича * SASI индексы (разработаны Apple) включенные в Cassandra 3.4 поддерживают сравнение на больше/меньше и LIKE. SASI хранятся как часть каждого файла SSTable, а не в отдельной «скрытой» таблице как оригинальные индексы Cassandra. Poliakov Andrei: 2018 18
  • 21. Пользовательские типы 1. CREATE TYPE address ( ... street text, ... city text, ... state text, ... zip_code int); 2. ALTER TABLE user ADD addresses map<text, frozen<address>>; 3. UPDATE user SET adresses = adresses + {'home' : {street: 'Lenina street', city: 'Chelyabinsk', state: 'Chelyabinsk oblast', zip_code: 454130}} WHERE first_name = 'Bill'; 2. ALTER TABLE user ADD addresses map<text, address>; Poliakov Andrei: 2018 21
  • 22. TTL (время жизни столбца) и временные метки • Возможность задать срок хранения данных, необходимость в которых отпала (работает на уровне значений отдельных столбцов). UPDATE user USING TTL 3600 SET last_name = ‘McDonald’ WHERE fisrt_name = ‘Robin’; SELECT first_name, last_name, TTL(last_name) FROM user; • Всякий раз, как мы записываем данные, Cassandra генерирует временную метку для каждого обновленного столбца (в общем случае сохраняется изменение с самой поздней временной меткой) SELECT writetime(first_name) FROM user; SELECT writetime(second_name) FROM user; Poliakov Andrei: 2018 22
  • 24. Создание и настройка кластера (практика) • На примере ccm: • Создание кластера • Добавление узлов и пересчет токенов • Динамическое добавление узлов (выход узлов из строя и возвращение в кластер) Poliakov Andrei: 2018 24
  • 25. Мониторинг (JMX) (практика) • Сервер • Порт Poliakov Andrei: 2018 25
  • 26. Легковесные транзакции (LWT) • Традиционный подход: распределенные транзакции и двухфазная фиксация. • Что делать, когда строгой согласованности мало для предотвращения состояния гонки в случаях, когда клиент должен сначала прочитать, а затем записать данные? Нужна линеаризуемая согласованность (в терминах ACID – последовательный уровень изоляции). Poliakov Andrei: 2018 26
  • 28. Легковесные транзакции (LWT) • Расширяем Paxos: для успешного завершения транзакции необходимы четыре раунда коммуникации между координатором и репликами. 1) подготовка/обещание 2) чтение/результаты 3) предложение/принятие 4) фиксация/подтверждение Poliakov Andrei: 2018 28
  • 29. Легковесные транзакции (LWT) • Пример 1: регистрируем пользователя INSERT INTO USERS (login, email, name, login_count) values ('jbellis', 'jbellis@datastax.com', 'Jonathan Ellis', 1) IF NOT EXISTS • Пример 2: сбрасываем пароль: UPDATE users SET reset_token = null, password = 'newpassword' WHERE login = 'jbellis' IF reset_token = 'some-generated-reset-token' Poliakov Andrei: 2018 29
  • 30. Материализованные представления CREATE MATERIALIZED VIEW <view_name> AS SELECT * FROM <base_table_name> WHERE k1 IS NOT NULL AND … kn IS NOT NULL AND custom_column IS NOT NULL PRIMARY KEY (custom_column, k1, …, kn); Poliakov Andrei: 2018 30
  • 31. Масштабирование: как добавить сервера в кластер? • У каждого сервера есть операция move token. Можно переназначить token у любого сервера • Топология кластера изменится, миграция данных будет происходить в фоне • Пока миграция не закончена, сервер будет отвечать за старый кусок данных • Аналогично будет отработана ситуация добавления нового сервера в token ring Poliakov Andrei: 2018 31
  • 32. Стратегии репликации • Первая реплика всегда хранится в узле, которому принадлежит диапазон, куда попал маркер, а местоположение остальных реплик определяется стратегией репликации: • AbstractReplicationStrategy • SimpleStrategy • TopologyStrategy • OldNetworkTopologyStrategy Poliakov Andrei: 2018 32
  • 33. Многоступенчатая событийно- ориентированная архитектура (SEDA) • Операция может начаться в одном потоке, затем продолжиться в другом, который может передать работу другому потоку. • Работа разбивается на ступени (stage) и ход выполнения определяет пул потоков (java,util.concurrent.ExecutorService), ассоциированный со ступенью. • Ступень состоит из входящей очереди событий, обработчика событий и ассоциированного пула потоков. Ступени управляются контроллером, который отвечает за планирование и выделение потоков. Примеры: • Чтение (локальное чтение) • Изменение (локальная запись) • Исправления на этапе чтения • Миграция (внесение изменений в схему) • Вручение напоминаний Poliakov Andrei: 2018 33
  • 34. Преимущества • Быстрый write, особенно когда не нужна consistency. • Легкость в администрировании. Один демон (daemon) с одним конфигурационным файлом. • Распределенность, устойчивость к разрывам сети • Высокая доступность Poliakov Andrei: 2018 34
  • 35. Недостатки • Плохо реализован range scan: кассандра не умеет передавать данные поточно. • Слишком много настроек вынесено на cluster level: вид и стратегия хранения ключей и т.д. • В старых версиях: протокол общения между нодами Thrift Poliakov Andrei: 2018 35
  • 37. Вопрос 1: Выберите верные утверждения В Cassandra нет схемы данных Cassandra поддерживает гибкую схему данных API, основанный на Thrift является рекомендуемым Рекомендуется использовать CQL Poliakov Andrei: 2018 37
  • 38. Вопрос 1: Выберите верные утверждения В Cassandra нет схемы данных Cassandra поддерживает гибкую схему данных API, основанный на Thrift является рекомендуемым Рекомендуется использовать CQL Poliakov Andrei: 2018 38
  • 39. Вопрос 2: Что будет выведено в результате запроса ”SELECT * FROM user WHERE second_name = ‘Gates’“? Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); В таблицу вставлены данные: {Bill Gates, Steve Jobs} ofirst_name | second_name ------------+------------- Bill | Gates oБудет ошибка, т.к. не созданы вторичные индексы ofirst_name | second_name ------------+------------- oБудет ошибка, т.к. не создано материализованное представление Poliakov Andrei: 2018 39
  • 40. Вопрос 2: Что будет выведено в результате запроса ”SELECT * FROM user WHERE second_name = ‘Gates’“? Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); В таблицу вставлены данные: {Bill Gates, Steve Jobs} ofirst_name | second_name ------------+------------- Bill | Gates oБудет ошибка, т.к. не созданы вторичные индексы ofirst_name | second_name ------------+------------- oБудет ошибка, т.к. не создано материализованное представление Poliakov Andrei: 2018 40
  • 41. Вопрос 3: Какой уровень согласованности данных поддерживается в Cassandra? oСлабая согласованность (в конечном счете) oНастраиваемый уровень согласованности oСтрогая согласованность oПричинно-следственная согласованность Poliakov Andrei: 2018 41
  • 42. Вопрос 3: Какой уровень согласованности данных используется в Cassandra? oСлабая согласованность (в конечном счете) oНастраиваемый уровень согласованности oСтрогая согласованность oПричинно-следственная согласованность Poliakov Andrei: 2018 42
  • 43. Вопрос 4: Согласованность «в конечном счете» означает: oВсе обновления рано или поздно распространятся во все реплики и реплики станут согласованными oПоследовательная согласованность oСтрогая согласованность oСогласованным считается самое последнее записанное значение Poliakov Andrei: 2018 43
  • 44. Вопрос 4: Согласованность «в конечном счете» означает: oВсе обновления рано или поздно распространятся во все реплики и реплики станут согласованными oПоследовательная согласованность oСтрогая согласованность oСогласованным считается самое последнее записанное значение Poliakov Andrei: 2018 44
  • 45. Вопрос 5: Как создать вторичный индекс? oCREATE INDEX <name> ON table_name(column_name); oCREATE CUSTOM INDEX <name> ON table_name(column_name); oCREATE SECONDARY INDEX <name> ON table_name(column_name); oCREATE CUSTOM INDEX <name> ON table_name(column_name) USING ‘org.apache.Cassandra.index.sasi.SASIIndex’; Poliakov Andrei: 2018 45
  • 46. Вопрос 5: Как создать вторичный индекс? oCREATE INDEX <name> ON table_name(column_name); oCREATE CUSTOM INDEX <name> ON table_name(column_name); oCREATE SECONDARY INDEX <name> ON table_name(column_name); oCREATE CUSTOM INDEX <name> ON table_name(column_name) USING ‘org.apache.Cassandra.index.sasi.SASIIndex’; Poliakov Andrei: 2018 46
  • 47. Вопрос 6: Имеется пользовательский тип address. Что произойдет при попытке добавить колонку в таблицу: ALTER TABLE user ADD addresses map<text, address>; Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); oКолонка будет успешно добавлена в таблицу oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) не заморожена oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) заморожена oБудет ошибка, т.к. не создано материализованное представление для пользовательского типаPoliakov Andrei: 2018 47
  • 48. Вопрос 6: Имеется пользовательский тип address. Что произойдет при попытке добавить колонку в таблицу: ALTER TABLE user ADD addresses map<text, address>; Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); oКолонка будет успешно добавлена в таблицу oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) не заморожена oБудет ошибка, т.к. вложенная коллекция (пользовательский тип) заморожена oБудет ошибка, т.к. не создано материализованное представление для пользовательского типаPoliakov Andrei: 2018 48
  • 49. Вопрос 7: Какую согласованность мы получим, если укажем при запросе уровень согласованности равным коэффициенту репликации? oСтрогую oВ конечном счете oНикакую oЖелезную Poliakov Andrei: 2018 49
  • 50. Вопрос 7: Какую согласованность мы получим, если укажем при запросе уровень согласованности равным коэффициенту репликации? oСтрогую oВ конечном счете oНикакую oЖелезную Poliakov Andrei: 2018 50
  • 51. Вопрос 8: Какие ограничения накладываются на материализованное представление? oВ первичный ключ материализованного представления нельзя включать несколько столбцов, не входящих в состав первичного ключа базовой таблицы oМатериализованные представления можно создавать только для таблиц, не содержащих кластерные столбцы oОграничения для материализованных представлений аналогичны ограничениям при создании обычных таблиц oНельзя использовать агрегаты Poliakov Andrei: 2018 51
  • 52. Вопрос 8: Какие ограничения накладываются на материализованное представление? oВ первичный ключ материализованного представления нельзя включать несколько столбцов, не входящих в состав первичного ключа базовой таблицы oМатериализованные представления можно создавать только для таблиц, не содержащих кластерные столбцы oОграничения для материализованных представлений аналогичны ограничениям при создании обычных таблиц oНельзя использовать агрегаты Poliakov Andrei: 2018 52
  • 53. Вопрос 9: Коэффициент репликации задается: oОдин раз для каждой таблицы oКлиентом в каждом запросе oОдин раз для всего пространства ключей oКлиентом в каждом запросе на обновление таблицы Poliakov Andrei: 2018 53
  • 54. Вопрос 9: Коэффициент репликации задается: oОдин раз для каждой таблицы oКлиентом в каждом запросе oОдин раз для всего пространства ключей oКлиентом в каждом запросе на обновление таблицы Poliakov Andrei: 2018 54
  • 55. Вопрос 10: Почему Cassandra не стоит использовать в качестве очереди: Очередь схожа с паттерном временных рядов Растущее число «надгробий» отрицательно сказывается на производительности Удаленные элементы не исчезают из таблицы и нужно пропустить, чтобы добраться до начала очереди Элементы очереди нельзя изменять Poliakov Andrei: 2018 55
  • 56. Вопрос 10: Почему Cassandra не стоит использовать в качестве очереди: Очередь схожа с паттерном временных рядов Растущее число «надгробий» отрицательно сказывается на производительности Удаленные элементы не исчезают из таблицы и нужно пропустить, чтобы добраться до начала очереди Элементы очереди нельзя изменять Poliakov Andrei: 2018 56
  • 57. Вопрос 11: Что будет выведено по запросу SELECT * FROM user WHERE first_name = 'Bill’; ? Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); В таблицу вставлены данные: {Bill Gates, Steve Jobs} Выполнен запрос DELETE second_name FROM user WHERE first_name = ‘Bill’; ofirst_name | second_name ------------+------------- Bill | null oБудет ошибка, т.к. не созданы вторичные индексы ofirst_name | second_name ------------+------------- ofirst_name | ------------| Bill | Poliakov Andrei: 2018 57
  • 58. Вопрос 11: Что будет выведено по запросу SELECT * FROM user WHERE first_name = 'Bill’; ? Таблица создана запросом: CREATE TABLE user (first_name text, second_name text, PRIMARY KEY (first_name)); В таблицу вставлены данные: {Bill Gates, Steve Jobs} Выполнен запрос DELETE second_name FROM user WHERE first_name = ‘Bill’; ofirst_name | second_name ------------+------------- Bill | null oБудет ошибка, т.к. не созданы вторичные индексы ofirst_name | second_name ------------+------------- ofirst_name | ------------| Bill | Poliakov Andrei: 2018 58

Editor's Notes

  1. Стр. 67-68 Можно развернуть на одном узле, но возможно стоит использовать РСУБД (проще и более знакомая). Быстрее операции записи, чем операции чтения данных (Cassandra оптимизирована для записи: большое количество записей и параллельных клиентов). Возможны сценарии проведения репликации из одного ЦОДа в другие (выигрыш в производительности, если данные находятся рядом с пользователем). Cassandra хорошо подходит для "молодых" приложений и стартапов, так как поддерживает гибкую схему данных.
  2. Стр 93 Кластер – контейнер пространств ключей, расположенных в одном или нескольких узлах. Также называют кольцом, т.к. Cassandra распределяет данные между узлами кластера, считая их закольцованными. Пространство ключей – контейнер таблиц. Таблица – логическая структура, объединяющая похожие данные, контейнер строк. Строка – контейнер столбцов, на который можно сослаться по первичному ключу. Строка состоит из первичного ключа (состоящего из одного или нескольких столбцов) и дополнительных столбцов. Столбец – пара «имя-значение»
  3. Стр 94 Широкие строки – строки, содержащие много столбцов (также называются разделами). В широких строках используется составной первичный ключ. Составной ключ состоит из ключа раздела (partition key) и необязательных кластерных столбцов (clustering column). Ключ раздела служит для определения узлов, на которых хранятся строки. Кластерные столбцы используются для управления сортировкой данных при хранении внутри раздела. Статические столбцы служат для хранения данных, которые не являются частью первичного ключа, но одинаковы во всех строках одного раздела.
  4. Виртуальные узлы (v-узлы) – вместо того, чтобы назначать узлу один маркер, диапазон маркеров разбивается на несколько меньших диапазонов. Затем каждому физическому узлу назначается несколько маркеров. По умолчанию каждому узлу назначается 256 таких маркеров, т.е. он содержит 256 виртуальных узлов. Виртуальные узлы по умолчанию включены. Виртуальные узлы ускоряют тяжелые операции: инициализация нового узла, вывод узла из эксплуатации и исправление узла. Связано это с тем, что нагрузка, ассоциированная с операциями в нескольких меньших диапазонах, более равномерно распределяется между узлами кластера. Разделители: Murmur3Partitioner, RandomPartitioner.
  5. Hinted handoff – вручение напоминаний QUORUN и ALL – строгие уровни согласованности ANY, ONE, TWO, THREE - слабые
  6. CREATE CUSTOM INDEX <name> ON table_name(column_name) USING ‘org.apache.Cassandra.index.sasi.SASIIndex’;
  7. Пример работы с Cassandra с помощью CQL (показать работу с CQL в консоли)
  8. Первичный ключ материализованного представления должен включать все столбцы первичного ключа базовой таблицы. Это ограничение не позволяет Cassandra свернуть несколько строк базовой таблицы в одну строку материализованного представления, что сильно бы усложнило бы управление обновлениями. Чаще всего вначале помещают дополнительный столбец, который становится ключом раздела, а за ним – столбцы, входящие в состав первичного ключа базовой таблицы, которые в материализованном представлении оказываются кластерными столбцами. Фильтр необходимо задать для каждого столбца первичного ключа материализованного представления (например, IS NOT NULL).
  9. SimpleStrategy – помещает реплики в соседние узлы кольца, начиная с узла, указанного разделителем TopologyStrategy – позволяет задать различные коэффициенты репликации для каждого ЦОДа. В пределах одного ЦОДа он распределяет реплики по разным стойкам, стремясь максимизировать доступность. OldNetworkTopologyStrategy – оставлена ради обратной совместимости