Вы находитесь на странице: 1из 40

Выбираем Apache Cassandra в качестве

NoSQL хранилища для своего приложения

спикер: Антон Семаник


ПРОБЛЕМА

К нам приходит заказчик и говорит:

- I want something NoSQL*

* I do not know what is NoSQL but I need it


ВАРИАНТЫ
КАК НЕ СДЕЛАТЬ ОШИБКУ?

● Что такое NoSQL и с чем его едят?


● Какие есть типы NoSQL хранилищ?
● Что нужно учитывать при выборе NoSQL хранилища?
● Когда стоит и когда не стоит использовать Apache
Cassandra?
● Как с ней правильно работать?
В РАМКАХ ДОКЛАДА Я НЕ БУДУ

● Критиковать RDBMS
● Топить за NoSQL
● Агитировать всех использовать Кассандру
ПОЧЕМУ?
ЧТО ТАКОЕ NoSQL (от англ. not only SQL
— не только SQL) — термин,
NoSQL обозначающий ряд подходов,
направленных на реализацию
систем управления базами
данных, имеющих
существенные отличия от
NoSQL это: моделей, используемых в
традиционных реляционных
СУБД с доступом к данным
● Отсутствие жесткой схемы данных средствами языка SQL.
Применяется к базам данных,
● Отказ от атомарности и согласованности в которых делается попытка
решить проблемы
в пользу горизонтального масштабируемости и
масштабирования доступности за счёт
атомарности (англ. atomicity) и
согласованности данных (англ.
consistency).
(с)
Wikipedia
КЛАССИФИКАЦИЯ NoSQL ХРАНИЛИЩ

Key-Value MemcacheDB, Redis, Riak,


Amazon DynamoDB

Column-Family Cassandra, Scylla, HBase

Graph MarkLogic, Neo4J

Document Couchbase, MongoDB, CouchDB


APACHE CASSANDRA

Apache Cassandra ― реализация


семейства NoSQL Column Family.

Database = Keyspace
Column Family = Table
ПРЕИМУЩЕСТВА

● высокая масштабируемость и надежность


● репликация из коробки
● очень высокая пропускная способность записи
● хорошая пропускная способность чтения
● настраиваемая согласованность
● SQL-подобный язык запросов
НЕМНОГО ИСТОРИИ
АРХИТЕКТУРА КЛАСТЕРА
TOKEN RING
РЕПЛИКАЦИЯ
SimpleStrategy
РЕПЛИКАЦИЯ
NetworkTopologyStrategy
ЗАПИСЬ ДАННЫХ
С точки зрения клиента / кластера

Consistency Level
ANY Начальный Сервер (Hinted
Handoff)
ONE Одна реплика

QUORUM Replication Factor / 2 +1

ALL Все реплики


ЗАПИСЬ ДАННЫХ
С точки зрения Replication Node

BigTable
ЧТЕНИЕ ДАННЫХ
С точки зрения клиента / кластера

Consistency Level
ONE Одна реплика

QUORUM Replication Factor / 2 +1

ALL Все реплики


НАДЕЖНОСТЬ
МАСШТАБИРОВАНИЕ

● Поддерживается из коробки
● “На ходу” можно добавить ноды
● Миграция выполняется в фоне
МАСШТАБИРОВАНИЕ

benchmark:

● 48 серверов в кластере = 174,373 записи/сек (3633/сервер)

● 288 серверов в кластере = 1,099,837 записей/сек (3818/сервер)

Если пропускная способность одного сервера - T, то N серверов


будут обеспечивать пропускную способность ~ N * T.
СОГЛАСОВАННОСТЬ ДАННЫХ

Ни одной ошибки!
Cassandra Query Language

CREATE TABLE emp (


empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID, deptID));

INSERT INTO emp (empID, deptID, first_name, last_name)


VALUES (104, 108, 'John','Doe');

SELECT deptID FROM emp WHERE empID = 104;


ЧТО ИМЕЕМ В ИТОГЕ?

Базу данных, которая по своей природе и архитектуре:


● надежна
● масштабируется горизонтально
● поддерживает репликацию из коробки
● молниеносно пишет
● быстро читает
● позволяет клиенту работать с любым сервером
● имеет SQL-подобный язык запросов

ПОЧЕМУ БЫ НЕ ИСПОЛЬЗОВАТЬ ЕЕ ВЕЗДЕ???!!!


НЕ ВСЕ ТАК ПРОСТО!
И ТЕПЕРЬ О ГРУСТНОМ...

Для клиента:

● Неправильная трактовка и использование фич


● Некорректное построение модели данных
● Использование для некорректной предметной области

Ведут к множеству проблем...


НЕМНОГО О ФИЧАХ...

Фичи, которые звучат так же как в реляционных базах,


но работают совсем не так:

● Вторичные Индексы (Secondary Index)


● Счетчики (Counters)
● LightWeight транзакции
● Batch операции
● CQL
CQL
это не SQL

● Нет JOIN и FOREIGN KEY


● INSERT = UPDATE
● DELETE = отдельная история
● WHERE a > 10 AND a < 1000 = отказ от выполнения
● WHERE очень ограничен
● ORDER BY очень ограничен
НЕМНОГО О МОДЕЛИ ДАННЫХ...

То что хорошо в реляционных базах, Кассандре - смерть:

● Не пытайтесь нормализовать схему данных


● Избыточность это хорошо
● Фильтрация, сортировка работают только по Primary Key
● Пейджинация - боль
● Данные делятся по разделам и это нужно учитывать
КОГДА СТОИТ ЗАДУМАТЬСЯ ОБ ИСПОЛЬЗОВАНИИ
Cassandra

Когда вам нужны:

● Глобальная распределенность
● Линейная масштабируемость
● P2P архитектура (нет мастера и слейва)
● Молниеносная запись
● Быстрая выборка по ключу
КОГДА СТОИТ ЗАДУМАТЬСЯ ОБ ИСПОЛЬЗОВАНИИ
чего-то другого

Когда вам нужно будет использовать что-то из списка ниже, даже не пытайтесь
смотреть в сторону Кассандры, вы будете несчастны.

● Таблицы с множеством вторичных индексов


● Агрегация данных
● Джоины
● Локи
● Много апдейтов
● Транзакции
НЕМНОГО О СФЕРАХ ПРИМЕНЕНИЯ…
Идеальные кейсы

● запись в разы превышает чтение


● записи редко обновляются
● не нужны джоины и агрегация
● доступ к данным только по праймари ключу
● данные можно равномерно разбить на разделы небольшого размера
НЕМНОГО О СФЕРАХ ПРИМЕНЕНИЯ…
Примеры предметных областей

● Системы трекинга
● Логирование транзакций: покупки,
просмотры, оценки, клики
● Сохранение данных Health трекеров
● IOT история ивентов и состояний
Cassandra + Java + =

● Datastax Java Driver

● Spring Data Cassandra

● Cassandra JDBC Driver


(не для продакшена)
Spring Data Cassandra

Работает поверх Datastax Java Driver 3.x


● Автогенерация Repository классов на основе
стандартных Spring Data интерфейсов

● Синхронные, асинхронные и реактивные операции

● Трансляция исключений

● Удобные QueryBuilder’ы
ВРЕМЯ ДЛЯ ПРИМЕРА

Давайте немного покодим!


КТО ИСПОЛЬЗУЕТ?

Apple - 100,000 nodes


Ebay
Netflix
Uber
CERN
Cisco WebEx
Reddit
...
КАК МЫ ИСПОЛЬЗУЕМ?

● Хранение метаданных для версионированного контента


● Система нотификации о различных событиях для веб приложения
ПРО ГРАБЛИ...

● Пытались нормализовать схему данных


● Пытались делать сортировки на UI
● Прикручивали пейджинацию на UI
● ...
Cassandra vs MongoDB

По-любому кто-то спросит...


Cassandra MongoDB

Structure Column Document

Indexes Query using primary key Indexes are preferred

Clustering Each node is Master Single Master

Query Lang CQL (SQL like) Scripting language

Replication Out of the box (configurable) Built-in (requires setup)

Maintained by Apache Foundation MongoDB Inc.

Supported by Third-party companies like Datastax Enterprise-grade 24x7 support


ВМЕСТО ЗАКЛЮЧЕНИЯ

Without understanding the design


criteria, implementation and
distribution plan, any attempt to
use a distributed database like
Cassandra is going to fail.
Usually in a spectacular fashion.
ИСТОЧНИКИ

● https://habr.com/ru/company/lifestreet/blog/146115/
● http://profyclub.ru/docs/172
● https://habr.com/ru/post/258581/
● https://blog.panoply.io/cassandra-vs-mongodb
● https://blog.pythian.com/cassandra-use-cases/
● https://www.ibm.com/developerworks/ru/library/os-apache-cassandra/index.html
● https://blog.bissquit.com/dbms/apache-cassandra/apache-cassandra-zapis-dannyh-chast-3-sstable/
● https://habr.com/ru/company/oleg-bunin/blog/417617/
● https://tech.ebayinc.com/engineering/cassandra-data-modeling-best-practices-part-1/
● https://tech.ebayinc.com/engineering/cassandra-data-modeling-best-practices-part-2/

Вам также может понравиться