Apache Cassandra
и подруга её Scylla
Даниил Подольский
независимый консультант
Немного о докладчике
● Эксплуатирую кассандру в разных
проектах
Немного о докладчике
● Эксплуатирую кассандру в разных
проектах
● Уже 5 лет
Немного о докладе
● Фактически - обзорный
Немного о докладе
● Фактически - обзорный
● Цель - продемонстрировать отличия
от “традиционных” AKA
реляционных СУБД
Немного о докладе
● Фактически - обзорный
● Цель - продемонстрировать отличия
от “традиционных” AKA
реляционных СУБД
● Чтобы дать представление о круге
задач, для которых Cassandra
подходит хорошо
Немного о докладе
● Фактически - обзорный
● Цель - продемонстрировать отличия
от “традиционных” AKA
реляционных СУБД
● Чтобы дать представление о круге
задач, для которых Cassandra
подходит хорошо
○ Спойлер: этот круг довольно узок
Cassandra, как мы ее себе
представляем
Cassandra
● NoSQL DBMS
Cassandra, как мы ее себе
представляем
Cassandra
● NoSQL DBMS
● Отказоустойчивая
Cassandra, как мы ее себе
представляем
Cassandra
● NoSQL DBMS
● Отказоустойчивая
● Распределенная
Cassandra, как мы ее себе
представляем
Cassandra
● NoSQL DBMS
● Отказоустойчивая
● Распределенная
● Быстрая
Cassandra, как мы ее себе
представляем
Cassandra
● NoSQL DBMS
● Отказоустойчивая
● Распределенная
● Быстрая
● Eventually consistent
Cassandra, как она есть
● NoSQL DBMS
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
● Отказоустойчивая
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
● Отказоустойчивая
● Распределенная
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
● Отказоустойчивая
● Распределенная
● Быстрая
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
● Отказоустойчивая
● Распределенная
● Быстрая
● Eventually consistent
Cassandra, как она есть
● NoSQL DBMS
○ схема данных и язык CQL
● Отказоустойчивая
● Распределенная
● Быстрая
● Eventually consistent
○ Time based, со всеми вытекающими
В сравнении с RDBMS
Отсутствуют
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
● Транзакции
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
● Транзакции
○ есть в рамках одной строки
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
● Транзакции
○ есть в рамках одной строки
● Вторичные индексы
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
● Транзакции
○ есть в рамках одной строки
● Вторичные индексы
○ Они есть
В сравнении с RDBMS
Отсутствуют
● Relations (foreign keys, joins, etc)
● Транзакции
○ есть в рамках одной строки
● Вторичные индексы
○ Они есть
○ Но работают иначе
Скорость
● Кассандра быстро пишет
Скорость
● Кассандра быстро пишет
○ И расходует при этом много iops
Скорость
● Кассандра быстро пишет
○ И расходует при этом много iops
● Cassandra читает как-то
Скорость
● Кассандра быстро пишет
○ И расходует при этом много iops
● Cassandra читает как-то
○ Никаких гарантий
Скорость
● Кассандра быстро пишет
○ И расходует при этом много iops
● Cassandra читает как-то
○ Никаких гарантий
○ Но обычно - быстро
Скорость
● Кассандра быстро пишет
○ И расходует при этом много iops
● Cassandra читает как-то
○ Никаких гарантий
○ Но обычно - быстро
■ Если не перегружена
Потому, что гладиолус LevelDB
● Append only
Потому, что гладиолус LevelDB
● Append only
● Compaction
Потому, что гладиолус LevelDB
● Append only
● Compaction
Вообще, по-настоящему хорошо это
работает, если никогда не делать
UPDATE
Об архитектуре хранения данных
● PRIMARY KEY
Об архитектуре хранения данных
● PRIMARY KEY
○ Обязателен
Об архитектуре хранения данных
● PRIMARY KEY
○ Обязателен
○ Уникален
Об архитектуре хранения данных
● PRIMARY KEY
○ Обязателен
○ Уникален
○ Определяет шард
Об архитектуре хранения данных
● PRIMARY KEY
○ Обязателен
○ Уникален
○ Определяет шард
■ Который определяет сервер, на
котором хранятся данные
Об архитектуре хранения данных
● PRIMARY KEY
○ Обязателен
○ Уникален
○ Определяет шард
■ Который определяет сервер, на
котором хранятся данные
○ Двухчастный
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
○ Partition Key
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
○ Partition Key
○ Clustering Key
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
○ Partition Key
○ Clustering Key
● Ключевой фактор, влияющий на
производительность
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
○ Partition Key
○ Clustering Key
● Ключевой фактор, влияющий на
производительность
○ Трудно понять, как правильно
Об архитектуре хранения данных
● Двухчастный PRIMARY KEY
○ Partition Key
○ Clustering Key
● Ключевой фактор, влияющий на
производительность
○ Трудно понять, как правильно
○ Невозможно поменять
О вторичных ключах
● Чисто маркетинговая фишка
О вторичных ключах
● Чисто маркетинговая фишка
○ Не нужны
О вторичных ключах
● Чисто маркетинговая фишка
○ Не нужны
● Работают плохо
О вторичных ключах
● Чисто маркетинговая фишка
○ Не нужны
● Работают плохо
● Запрос по вторичному ключу
достает данные со всех нод
кластера
О вторичных ключах
● Чисто маркетинговая фишка
○ Не нужны
● Работают плохо
● Запрос по вторичному ключу
достает данные со всех нод
кластера
○ Производительность падает при
расширении кластера
Еще о первичном ключе
● UPDATE для колонок, в него
включенных, невозможен
Еще о первичном ключе
● UPDATE для колонок, в него
включенных, невозможен
○ Потому, что первичный ключ
определяет физическое
расположение данных
Еще о первичном ключе
● UPDATE для колонок, в него
включенных, невозможен
○ Потому, что первичный ключ
определяет физическое
расположение данных
○ А DELETE-INSERT нельзя
сделать транзакционным в
распределенной системе
Отказоустойчивость
● Ключевой фактор - replication factor
Отказоустойчивость
● Ключевой фактор - replication factor
○ Определяет, сколько полных
копий всех данных вы храните
Отказоустойчивость
● Ключевой фактор - replication factor
○ Определяет, сколько полных
копий всех данных вы храните
○ При значениях меньше 3 не
обеспечивает отказоустойчивости
Отказоустойчивость
● Ключевой фактор - replication factor
○ Определяет, сколько полных
копий всех данных вы храните
○ При значениях меньше 3 не
обеспечивает отказоустойчивости
● Выбор ноды реализован на клиенте
Отказоустойчивость
● Ключевой фактор - replication factor
○ Определяет, сколько полных
копий всех данных вы храните
○ При значениях меньше 3 не
обеспечивает отказоустойчивости
● Выбор ноды реализован на клиенте
● Rebalancing может быть болью
Отказоустойчивость
● Ключевой фактор - replication factor
○ Определяет, сколько полных
копий всех данных вы храните
○ При значениях меньше 3 не
обеспечивает отказоустойчивости
● Выбор ноды реализован на клиенте
● Rebalancing может быть болью
○ и унижением
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
● Но:
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
● Но:
○ Невидимы для iostat
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
● Но:
○ Невидимы для iostat
○ Неэффективно используют кеш
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
● Но:
○ Невидимы для iostat
○ Неэффективно используют кеш
■ Личные наблюдения
Memory mapped files
● Штатный способ доступа к данным
со стороны cassandra
● Но:
○ Невидимы для iostat
○ Неэффективно используют кеш
■ Личные наблюдения
● Должно сильно зависеть
от данных
ScyllaDB
● Disclaimer: чистая теория
ScyllaDB
● Disclaimer: чистая теория
● Scylla is a drop-in Apache Cassandra
replacement that powers your
applications with ultra-low latency and
extreme throughput.
ScyllaDB
● Disclaimer: чистая теория
● Scylla is a drop-in Apache Cassandra
replacement that powers your
applications with ultra-low latency and
extreme throughput.
● http://www.scylladb.com/
ScyllaDB: о совместимости
● Scylla is compatible with Apache
Cassandra, version 2.1.8
ScyllaDB: о совместимости
● Scylla is compatible with Apache
Cassandra, version 2.1.8
● Самая важная страница
ScyllaDB: о совместимости
● Scylla is compatible with Apache
Cassandra, version 2.1.8
● Самая важная страница
○ http://docs.scylladb.com/cassandra-
compatibility/
ScyllaDB: чего не хватает
(из важного)
● Secondary Index
ScyllaDB: чего не хватает
(из важного)
● Secondary Index
● User Define Functions
ScyllaDB: чего не хватает
(из важного)
● Secondary Index
● User Define Functions
● Triggers
Спасибо
Вопросы?
Контакты докладчика
onokonem@gmail.com
Jabber: onokonem@gmail.com
Telegram: onokonem
Skype: onokonem

apache cassandra и подруга её scylla