SlideShare a Scribd company logo
Обзор перспективных
СУБД для highload
Юрий Насретдинов
План
• Обо мне
• Подход к выбору технологий
• Tarantool
• ClickHouse
• CockroachDB
• Заключение
Обо мне
• Зовут Юрий, в честь дедушки
• Написал свою СУБД на PHP
• Работал в Badoo ~5 лет в отделе «платформы»
• 10 лет опыта программирования на PHP
• Сейчас разрабатываю на Go
Зачем этот доклад?
• Индустрия IT быстро развивается
• Highload — тем более
• Через 10 лет ваши сегодняшние знания и
навыки безнадежно устареют
Подход к выбору технологий
1. Архитектуру
2. Не только сильные, но и слабые места
3. Как «это» мониторить и бэкапить
4. Что делать, когда это всё «упадет»
Перед запуском системы в продакшен вы должны понимать:
Подход к выбору технологий
1. Разработано и протестировано в большой компании
2. Вы знакомы с разработчиками
3. У разработчиков уже есть похожие успешные проекты
4. В документации упоминается внутреннее устройство и оно
вам понятно
Хорошими ориентирами являются:
Примеры успешных технологий в прошлом
• MySQL (MyISAM)
• MongoDB (MMAP)
• Memcached
• FreeBSD 4
Примеры успешных технологий в прошлом
• Простота и понятность архитектуры
• Работает сразу, минимум настроек
• Надежность (не «падает» на ровном месте)
• Понятные tradeoffs
Примеры успешных технологий в прошлом
• MySQL (MyISAM)
• MongoDB (MMAP)
• Memcached
• FreeBSD 4
скорость, простота потеря данных
скорость, простота
скорость, простота, эффективность
простота, надежность, стабильность
потеря данных
Обзор перспективных баз данных для highload / Юрий Насретдинов
Tarantool: предпосылки
web1 web2 webN• • •
mysql1 mysql2 mysqlN• • •
1-1000 1001-2000 X-(X+999)
sign in for nasretdinov@gmail.com where to go?
Tarantool: предпосылки
web1 web2 webN• • •
mysql1 mysql2 mysqlN• • •
1-1000 1001-2000 X-(X+999)
sign in for +7 (910) 123-34-45 where to go?
Tarantool: предпосылки
mysql1 mysql2 mysqlN• • •
1-1000 1000-2000 X-(X+1000)
sign in for nasretdinov@gmail.com where to go?
central «authorizer» database
Tarantool: предпосылки
Как обновлять?
Как реплицировать?
Как рестартовать?Как добавить новые индексы?
Возможные решения
• Форк memcached — сложная поддержка, только в памяти
• MySQL — тяжеловесный, но есть HandlerSocket
• Redis — не поддерживает индексы
• Oracle — …
• Zookeeper — нет программируемой логики
Tarantool
• In-memory
• Быстрый — до 1М RPS на ядро CPU
• Конвейерная архитектура
• Написан и отлажен в mail.ru
• Константин Осипов ранее разрабатывал MySQL
• Хорошая модель персистентности — snapshots + log
Tarantool: архитектура
client1
client2
clientN
client3
•••
I/O Execution WAL
threads:
Tarantool: snapshots pre1.6.7
Parent Child
shared
private
shared
private CoW
fork
snapshot file
Tarantool: snapshots pre1.6.7
• Fork занимает ~10мс на 1Гб RSS
• Копирование при записи делается блоками по 4 Кб
• Общая память не помечается как CoW
• Небольшая пауза при создании snapshot
Tarantool: snapshots 1.6.7+
• User-space memory address translation (matras)
Tarantool: сценарии использования
• Очень много клиентов
• Много мелкого чтения и записи
• Необходимость в централизованном хранилище с индексами
• Желание иметь часть логики в базе
• Пример: сессии пользователей, «authorizer», счетчики
посещений
Tarantool: когда не использовать
• Если нужны: SQL, автоматический шардинг и failover,
Raft / Paxos, длинные транзакции
• Мало клиентов и требование минимальной latency
• Рабочий набор не влезает в память
• Аналитика (см. далее)
Обзор перспективных баз данных для highload / Юрий Насретдинов
ClickHouse: предпосылки
• Эффективная и линейно масштабируемая
• В реалтайме
• Бесплатная и open-source
• ^ выберите любые два
Аналитика для веб-сайтов и приложений:
Возможные решения
• MySQL (MyISAM) — быстрая запись, медленное чтение
• Vertica, Exasol — платно
• Hadoop — не realtime, сложно настраивать и поддерживать
Аналитика для веб-сайтов и приложений:
Возможные решения
• MySQL (MyISAM) — быстрая запись, медленное чтение
• Vertica, Exasol — платно
• Hadoop — не realtime, сложно настраивать и поддерживать
Аналитика для веб-сайтов и приложений:
выбор Яндекса
ClickHouse
• Распределенная СУБД для аналитики
• Колоночное хранение
• Оптимизирована для HDD
• Исключительно быстрая
• Протестирована в продакшене Яндекса
ClickHouse: внутреннее устройство
FlightDate Month Carrier Origin Dest
• • •
Div5TailNumYear
Partition 2017-06
ClickHouse: «засечки»
FlightDateYear
<2017,05-01>
<2017,05-03>
<2017,05-05>
<2017,05-10>
<2017,05-15>
<2017,05-21>
<2017,05-24>
<2017,05-28>
<2017,05-30>
SELECT count()
FROM flights
WHERE year = 2017
AND FlightDate
BETWEEN ’05-11’ AND ’05-16’
Primary Key
ClickHouse: MergeTree
FlightDate Month Carrier Origin Dest
• • •
Div5TailNumYear
Temp Partition 2017-06 #1
Temp Partition 2017-06 #2
}FlightDate Month Carrier Origin Dest
• • •
Div5TailNumYear
FlightDate Month Carrier Origin Dest
• • •
Div5TailNumYear
Temp Partition 2017-06 #3
ClickHouse: возможности
• SQL, ограниченные JOIN’ы
• Репликация и работа в кластере (требуется ZooKeeper)
• 17* алгоритмов выполнения GROUP BY
• MATERIALIZED VIEWS, GLOBAL JOINs
• Выборки с сэмплированием
* наверняка их уже больше
ClickHouse: ограничения
• Только INSERT, нет UPDATE или DELETE
• JOIN’ы только для таблиц, которые влезают в память
• Полуручное управление кластером
• Нет полноценных транзакций, только атомарный INSERT
ClickHouse: сценарии использования
• Задачи realtime аналитики
• Time-series (https://github.com/yandex/graphouse)
• Хранение сырых событий — показы, клики, etc.
• Логи
• Результаты тестов
ClickHouse: когда не использовать
• OLTP-задачи
• Работа с деньгами
• Хранение только агрегатов
• Map / Reduce задачи
• Полнотекстовый поиск
Обзор перспективных баз данных для highload / Юрий Насретдинов
CockroachDB: предпосылки
web1 web2 webN• • •
mysql1 mysql2 mysqlN• • •
sign in for nasretdinov@gmail.com where to go?
1-1000 1000-2000 X-(X+1000)
CockroachDB: предпосылки
web1 web2 webN• • •
mysql1 mysql2 mysqlN• • •
1-1000 1000-2000 X-(X+1000)
sign in for +7 (910) 123-34-45 where to go?
CockroachDB: предпосылки
CREATE TABLE users (
id INT,
email VARCHAR(200),
phone VARCHAR(30),
...,
PRIMARY KEY (id),
UNIQUE INDEX (email),
UNIQUE INDEX (phone)
)
CockroachDB: предпосылки
SELECT * FROM users
WHERE email = ‘nasretdinov@gmail.com’
SELECT * FROM users
WHERE phone = ‘+7 (910) 123-34-45’
Возможные решения
• Google Cloud Spanner
• Authorizer + ручной шардинг
• MongoDB, Cassandra — не поддерживают распределенные
уникальные индексы
• Cвой вариант?
CockroachDB
• Изначально — распределенный Key-Value Storage
• Production Ready (шутка) — 10 Мая вышла версия 1.0
• SQL, JOINs
• Транзакции, ACID
• Уникальные индексы
• Автоматический шардинг и балансировка нагрузки
CockroachDB
• Создан авторами Google Spanner
• Есть community и enterprise версии
• Написан на Go
• Использует (Multi)Raft и RocksDB
• Прошел тестирование Jepsen
• Используется в Baidu на продакшене
CockroachDB: SQL to KV
CREATE TABLE test (
key INT PRIMARY KEY,
floatVal FLOAT,
stringVal STRING
)
INSERT INTO test
VALUES (10, 4.5, "hello")
key value
/test/10/floatVal 4.5
/test/10/stringVal "hello"
https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-
table-data-to-key-value-storage/
CockroachDB: SQL to KV
CREATE INDEX foo ON
test (stringVal)
key value
/test/primary/10 Ø
/test/primary/10/floatVal 4.5
/test/primary/10/stringVal "hello"
/test/foo/"hello"/10 Ø
https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-
table-data-to-key-value-storage/
CockroachDB: внутреннее устройство
a - j
k - n
o - t
a - j
k - n
u - z
u - z
o - t
k - n
a - j
u - z
o - t
roach1 roach2 roach3 roach4
{64 Мб
CockroachDB: внутреннее устройство
a - j
k - n
o - q | r - t
a - j
k - n
u - z
u - z
o - q | r - t
k - n
a - j
u - z
o - q | r - t
roach1 roach2 roach3 roach4
CockroachDB: внутреннее устройство
a - j
k - n
o - q
r - t
a - j
k - n
u - z
u - z
o - q
k - n
r - t
a - j
u - z
o - q
r - t
roach1 roach2 roach3 roach4
CockroachDB: внутреннее устройство
a - j
k - n
o - q
r - t
a - j
k - n
u - z
u - z
o - q
k - n
r - t
a - j
u - z
o - q
r - t
roach1 roach2 roach3 roach4
CockroachDB: распределенные транзакции
• Есть системная таблица со списком транзакций
• К каждому затронутому в транзакции ключу добавляется
рядом ключ с номером транзакции, в которой он изменялся
• При чтении такого ключа нужно посмотреть в списке
транзакций — закоммичена она или нет
• При успешном коммите значения заменяются на конечные
• Сборщик мусора чистит неудавшиеся транзакции
CockroachDB: сценарии использования
• Хранение пользовательских данных в кластере вместо
MySQL / PostgreSQL / MongoDB
CockroachDB: когда не использовать
• Требуется низкая latency
• Требуется высокий QPS
• Не нужна строгая консистентность
• Не нужны распределенные транзакции
• Нужны сложные хранимки, JOIN’ы, представления, триггеры
Tarantool (memtx)
• extreme RPS
• eventual consistency
• single-core
• in-memory
• manual sharding
ClickHouse
• auto parallelize
• HDD-optimized
• extreme throughput (scan 10^9 rows/sec per node)
• in-memory, limited joins
• no transactions, update/delete/replace
• semi-automatic cluster management
CockroachDB
• linear auto scaling
• ACID, distributed transactions
• supports standard SQL
• 1.0 just released
• limited joins
• poor performance (~ 1k RPS per node)
Заключение
• Теперь вы узнали про 3 новые базы данных и про то, где их
применять
• Думайте своей головой перед тем, как применять их в
продакшене
Вопросы
Юрий Насретдинов
nasretdinov@gmail.com

More Related Content

PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
PPTX
Поиск наизнанку
PDF
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
PDF
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
PDF
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Поиск наизнанку
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)

What's hot (20)

PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
PDF
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PDF
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PPTX
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
My talk at Highload++ 2015
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PPTX
Mysql vs postgresql
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
My talk at Highload++ 2015
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Mysql vs postgresql
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ad

Similar to Обзор перспективных баз данных для highload / Юрий Насретдинов (20)

PPTX
DBD lection 4. Big Data, NoSQL. In Russian.
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
PPTX
Анализируем данные с Clickhouse
PPTX
Open source субд глазами обычного программиста
PDF
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
PDF
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
PDF
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
PDF
High load++2016.highlights (dropbox+clickhouse)
PDF
Nosql and Mongodb
PDF
РИФ 2016, Tarantool – кейсы использования
PDF
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
PDF
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
PPT
phpConf 2010 Классификация систем хранения
PPTX
Построение аналитического хранилища на 100 петабайт
PDF
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
PDF
High load2007 scaling-web-applications-rus
PDF
SQL vs NoSQL: 
проблема выбора
PDF
Tk conf daniel-podolsky-sqlvsnosql
PDF
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
DBD lection 4. Big Data, NoSQL. In Russian.
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Анализируем данные с Clickhouse
Open source субд глазами обычного программиста
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
High load++2016.highlights (dropbox+clickhouse)
Nosql and Mongodb
РИФ 2016, Tarantool – кейсы использования
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
phpConf 2010 Классификация систем хранения
Построение аналитического хранилища на 100 петабайт
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
High load2007 scaling-web-applications-rus
SQL vs NoSQL: 
проблема выбора
Tk conf daniel-podolsky-sqlvsnosql
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Обзор перспективных баз данных для highload / Юрий Насретдинов

  • 1. Обзор перспективных СУБД для highload Юрий Насретдинов
  • 2. План • Обо мне • Подход к выбору технологий • Tarantool • ClickHouse • CockroachDB • Заключение
  • 3. Обо мне • Зовут Юрий, в честь дедушки • Написал свою СУБД на PHP • Работал в Badoo ~5 лет в отделе «платформы» • 10 лет опыта программирования на PHP • Сейчас разрабатываю на Go
  • 4. Зачем этот доклад? • Индустрия IT быстро развивается • Highload — тем более • Через 10 лет ваши сегодняшние знания и навыки безнадежно устареют
  • 5. Подход к выбору технологий 1. Архитектуру 2. Не только сильные, но и слабые места 3. Как «это» мониторить и бэкапить 4. Что делать, когда это всё «упадет» Перед запуском системы в продакшен вы должны понимать:
  • 6. Подход к выбору технологий 1. Разработано и протестировано в большой компании 2. Вы знакомы с разработчиками 3. У разработчиков уже есть похожие успешные проекты 4. В документации упоминается внутреннее устройство и оно вам понятно Хорошими ориентирами являются:
  • 7. Примеры успешных технологий в прошлом • MySQL (MyISAM) • MongoDB (MMAP) • Memcached • FreeBSD 4
  • 8. Примеры успешных технологий в прошлом • Простота и понятность архитектуры • Работает сразу, минимум настроек • Надежность (не «падает» на ровном месте) • Понятные tradeoffs
  • 9. Примеры успешных технологий в прошлом • MySQL (MyISAM) • MongoDB (MMAP) • Memcached • FreeBSD 4 скорость, простота потеря данных скорость, простота скорость, простота, эффективность простота, надежность, стабильность потеря данных
  • 11. Tarantool: предпосылки web1 web2 webN• • • mysql1 mysql2 mysqlN• • • 1-1000 1001-2000 X-(X+999) sign in for [email protected] where to go?
  • 12. Tarantool: предпосылки web1 web2 webN• • • mysql1 mysql2 mysqlN• • • 1-1000 1001-2000 X-(X+999) sign in for +7 (910) 123-34-45 where to go?
  • 13. Tarantool: предпосылки mysql1 mysql2 mysqlN• • • 1-1000 1000-2000 X-(X+1000) sign in for [email protected] where to go? central «authorizer» database
  • 14. Tarantool: предпосылки Как обновлять? Как реплицировать? Как рестартовать?Как добавить новые индексы?
  • 15. Возможные решения • Форк memcached — сложная поддержка, только в памяти • MySQL — тяжеловесный, но есть HandlerSocket • Redis — не поддерживает индексы • Oracle — … • Zookeeper — нет программируемой логики
  • 16. Tarantool • In-memory • Быстрый — до 1М RPS на ядро CPU • Конвейерная архитектура • Написан и отлажен в mail.ru • Константин Осипов ранее разрабатывал MySQL • Хорошая модель персистентности — snapshots + log
  • 18. Tarantool: snapshots pre1.6.7 Parent Child shared private shared private CoW fork snapshot file
  • 19. Tarantool: snapshots pre1.6.7 • Fork занимает ~10мс на 1Гб RSS • Копирование при записи делается блоками по 4 Кб • Общая память не помечается как CoW • Небольшая пауза при создании snapshot
  • 20. Tarantool: snapshots 1.6.7+ • User-space memory address translation (matras)
  • 21. Tarantool: сценарии использования • Очень много клиентов • Много мелкого чтения и записи • Необходимость в централизованном хранилище с индексами • Желание иметь часть логики в базе • Пример: сессии пользователей, «authorizer», счетчики посещений
  • 22. Tarantool: когда не использовать • Если нужны: SQL, автоматический шардинг и failover, Raft / Paxos, длинные транзакции • Мало клиентов и требование минимальной latency • Рабочий набор не влезает в память • Аналитика (см. далее)
  • 24. ClickHouse: предпосылки • Эффективная и линейно масштабируемая • В реалтайме • Бесплатная и open-source • ^ выберите любые два Аналитика для веб-сайтов и приложений:
  • 25. Возможные решения • MySQL (MyISAM) — быстрая запись, медленное чтение • Vertica, Exasol — платно • Hadoop — не realtime, сложно настраивать и поддерживать Аналитика для веб-сайтов и приложений:
  • 26. Возможные решения • MySQL (MyISAM) — быстрая запись, медленное чтение • Vertica, Exasol — платно • Hadoop — не realtime, сложно настраивать и поддерживать Аналитика для веб-сайтов и приложений: выбор Яндекса
  • 27. ClickHouse • Распределенная СУБД для аналитики • Колоночное хранение • Оптимизирована для HDD • Исключительно быстрая • Протестирована в продакшене Яндекса
  • 28. ClickHouse: внутреннее устройство FlightDate Month Carrier Origin Dest • • • Div5TailNumYear Partition 2017-06
  • 30. ClickHouse: MergeTree FlightDate Month Carrier Origin Dest • • • Div5TailNumYear Temp Partition 2017-06 #1 Temp Partition 2017-06 #2 }FlightDate Month Carrier Origin Dest • • • Div5TailNumYear FlightDate Month Carrier Origin Dest • • • Div5TailNumYear Temp Partition 2017-06 #3
  • 31. ClickHouse: возможности • SQL, ограниченные JOIN’ы • Репликация и работа в кластере (требуется ZooKeeper) • 17* алгоритмов выполнения GROUP BY • MATERIALIZED VIEWS, GLOBAL JOINs • Выборки с сэмплированием * наверняка их уже больше
  • 32. ClickHouse: ограничения • Только INSERT, нет UPDATE или DELETE • JOIN’ы только для таблиц, которые влезают в память • Полуручное управление кластером • Нет полноценных транзакций, только атомарный INSERT
  • 33. ClickHouse: сценарии использования • Задачи realtime аналитики • Time-series (https://github.com/yandex/graphouse) • Хранение сырых событий — показы, клики, etc. • Логи • Результаты тестов
  • 34. ClickHouse: когда не использовать • OLTP-задачи • Работа с деньгами • Хранение только агрегатов • Map / Reduce задачи • Полнотекстовый поиск
  • 36. CockroachDB: предпосылки web1 web2 webN• • • mysql1 mysql2 mysqlN• • • sign in for [email protected] where to go? 1-1000 1000-2000 X-(X+1000)
  • 37. CockroachDB: предпосылки web1 web2 webN• • • mysql1 mysql2 mysqlN• • • 1-1000 1000-2000 X-(X+1000) sign in for +7 (910) 123-34-45 where to go?
  • 38. CockroachDB: предпосылки CREATE TABLE users ( id INT, email VARCHAR(200), phone VARCHAR(30), ..., PRIMARY KEY (id), UNIQUE INDEX (email), UNIQUE INDEX (phone) )
  • 39. CockroachDB: предпосылки SELECT * FROM users WHERE email = ‘[email protected]’ SELECT * FROM users WHERE phone = ‘+7 (910) 123-34-45’
  • 40. Возможные решения • Google Cloud Spanner • Authorizer + ручной шардинг • MongoDB, Cassandra — не поддерживают распределенные уникальные индексы • Cвой вариант?
  • 41. CockroachDB • Изначально — распределенный Key-Value Storage • Production Ready (шутка) — 10 Мая вышла версия 1.0 • SQL, JOINs • Транзакции, ACID • Уникальные индексы • Автоматический шардинг и балансировка нагрузки
  • 42. CockroachDB • Создан авторами Google Spanner • Есть community и enterprise версии • Написан на Go • Использует (Multi)Raft и RocksDB • Прошел тестирование Jepsen • Используется в Baidu на продакшене
  • 43. CockroachDB: SQL to KV CREATE TABLE test ( key INT PRIMARY KEY, floatVal FLOAT, stringVal STRING ) INSERT INTO test VALUES (10, 4.5, "hello") key value /test/10/floatVal 4.5 /test/10/stringVal "hello" https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping- table-data-to-key-value-storage/
  • 44. CockroachDB: SQL to KV CREATE INDEX foo ON test (stringVal) key value /test/primary/10 Ø /test/primary/10/floatVal 4.5 /test/primary/10/stringVal "hello" /test/foo/"hello"/10 Ø https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping- table-data-to-key-value-storage/
  • 45. CockroachDB: внутреннее устройство a - j k - n o - t a - j k - n u - z u - z o - t k - n a - j u - z o - t roach1 roach2 roach3 roach4 {64 Мб
  • 46. CockroachDB: внутреннее устройство a - j k - n o - q | r - t a - j k - n u - z u - z o - q | r - t k - n a - j u - z o - q | r - t roach1 roach2 roach3 roach4
  • 47. CockroachDB: внутреннее устройство a - j k - n o - q r - t a - j k - n u - z u - z o - q k - n r - t a - j u - z o - q r - t roach1 roach2 roach3 roach4
  • 48. CockroachDB: внутреннее устройство a - j k - n o - q r - t a - j k - n u - z u - z o - q k - n r - t a - j u - z o - q r - t roach1 roach2 roach3 roach4
  • 49. CockroachDB: распределенные транзакции • Есть системная таблица со списком транзакций • К каждому затронутому в транзакции ключу добавляется рядом ключ с номером транзакции, в которой он изменялся • При чтении такого ключа нужно посмотреть в списке транзакций — закоммичена она или нет • При успешном коммите значения заменяются на конечные • Сборщик мусора чистит неудавшиеся транзакции
  • 50. CockroachDB: сценарии использования • Хранение пользовательских данных в кластере вместо MySQL / PostgreSQL / MongoDB
  • 51. CockroachDB: когда не использовать • Требуется низкая latency • Требуется высокий QPS • Не нужна строгая консистентность • Не нужны распределенные транзакции • Нужны сложные хранимки, JOIN’ы, представления, триггеры
  • 52. Tarantool (memtx) • extreme RPS • eventual consistency • single-core • in-memory • manual sharding
  • 53. ClickHouse • auto parallelize • HDD-optimized • extreme throughput (scan 10^9 rows/sec per node) • in-memory, limited joins • no transactions, update/delete/replace • semi-automatic cluster management
  • 54. CockroachDB • linear auto scaling • ACID, distributed transactions • supports standard SQL • 1.0 just released • limited joins • poor performance (~ 1k RPS per node)
  • 55. Заключение • Теперь вы узнали про 3 новые базы данных и про то, где их применять • Думайте своей головой перед тем, как применять их в продакшене