Выбираем СУБД для
хранения
временных рядов
Павел Филонов
Мы слишком часто склонны доверять своему оптимизму
(или эксплуатировать оптимистические надежды своих
спонсоров). Мы слишком часто не хотим прислушиваться к
голосу рассудка и обращаем много внимания на продавцов
панацей, поющих голосами сирен.
Фредерик Брукс «Мифический человеко-месяц»
digitalsubstation.ru
http://taneco.tatneft.ru/
Как мы видим данные
Модель данных и характеристики
• Схема
{
“id”: 42,
“ts”: 1023213221,
“value”: 3.14
}
• Число сенсоров ~ 104
• Частота опроса сенсоров ~ 1 раз в секунду
Проблема выбора!
www.wordclouds.com
Неинженерный подход
 я в другом проекте все хранил в X. Значит, нужно
использовать X;
 я в другом проекте все хранил в X. Значит, нужно
использовать всё что угодно, кроме X;
 а давайте возьмем X, а там уже разберемся;
 мне на конференции рассказали, что X - это
очень «круто»;
 я раньше никогда не работал с X. Давайте
отправим его в «продакшн».
Инженерный подход
1. Ознакомиться с литературой
2. Выбрать критерии сравнения
3. Выбрать конкурсантов
4. Выбрать методику тестирования
5. Провести тестирование
6. Провести анализ результатов
7. Оформить отчет
8. Предложить рекомендации
Трудозатраты
Критический обзор
• Если тест проводит компания-разработчик СУБД Bingo-BongoDB,
то в нем побеждает
• Bingo-BongoDB
• Для грамотного сравнения пропускной способности
нужно для разных СУБД
• использовать разные данные
Критерии
• Пропускная способность на запись
• В зависимости от размеров «батча»
• В зависимости от числа потоков
• Под продолжительной нагрузкой
• Время выполнения запросов
• В зависимости от длины запрашиваемого интервала
• Степень сжатия
Конкурсанты
Тестовый стенд и версии
Hardware
Core i7-4790
32 Gb RAM
256 Gb SSD (OS)
1 Tb HDD (data)
Software
Ubuntu 16.04.1 amd64
Docker 1.11.2
OpenTSDB 2.2.0
InfluxDB 13.0
MongoDB 3.2.10
PostgreSQL 9.6.0Client
Rust 1.12.1
postgres 0.11
mongo-driver 0.3.0
hyper 0.9
Пропускная способность на запись
m — размер батча
k — число потоков
MongoDB
Пропускная способность на запись
m — размер батча
k — число потоков
MongoDB
Пропускная способность на запись
m — размер батча
k — число потоков
MongoDB
Пропускная способность и размер батча
Пропускная способность и размер батча
Линейная регрессия
𝛼
𝛽
𝛼 ≈ 14𝐾
𝛽 ≈ 22𝐾
Нормированные результаты
Пропускная способность и число клиентов
Пропускная способность и число клиентов
Пропускная способность и число клиентов
Нормированные результаты
Пропускная способность под нагрузкой
Пропускная способность под нагрузкой
Пропускная способность под нагрузкой
Нормированные результаты
Время выполнения запросов
Время выполнения запросов
Нормированные результаты
Нормированные результаты
Многокритериальное сравнение Важность
критериев
Скалярная
оценка
×
InfluxDB
OpenTSDB
MongoDB
PostgreSQL
Вне конкурса
Многокритериальное сравнение Важность
критериев
Скалярная
оценка
×
InfluxDB
OpenTSDB
MongoDB
PostgreSQL
Вне конкурса
Многокритериальное сравнение Важность
критериев
Скалярная
оценка
×
InfluxDB
OpenTSDB
MongoDB
PostgreSQL
Вне конкурса
Image from: http://analitika-forex.ru
Последний конкурсант
Image from: habrahabr.ru
Нормированные результаты
×
ClickHouse
InfluxDB
×
ClickHouse
InfluxDB
Заключение
• Доверяй, но проверяй
• Use math, Luke
• Субъективную оценку тоже можно измерить
Источники
1. Y. Bassil. A Comparative Study on the Performance of the Top DBMS Systems
– paper
2. C. Pungila, O. Aritoni, TF. Fortis. Benchmarking Database Systems for the
Requirements of Sensor Readings – paper
3. B. Cooper, , A. Silberstein, E.Tam, R. Ramakrishnan, and R. Sears.
Benchmarking Cloud Serving Systems with YCSB – paper
4. T. Goldschmidt, H. Koziolek, A. Jansen. Scalability and Robustness of Time-
Series Databases for Cloud-Native Monitoring of Industrial Processes – paper
5. T. Person. InfluxDB Markedly Outperforms Elasticsearch in Time-Series Data
& Metrics Benchmark – blogpost
6. Д. Калугин-Балашов. Как выбрать In-memory NoSQL базу данных с
умом? - slides
Источники
7. B. Schwartz. Time-Series Databases and InfluxDB – blogpost
8. K. Eamonn and K. Shruti. On the Need for Time Series Data Mining
Benchmarks: A Survey and Empirical Demonstration – paper
9. R. Sonnenschein. Why industrial manufactoring data need special
considerations – slides
10. S.Acreman. Top10 Time Series Databases – blogpost
11. J. Guerrero. InfluxDB Tops Cassandra in Time-Series Data & Metrics
Benchmark – blogpost
12. J.Guerrero. InfluxDB is 27x Faster vs MongoDB for Time-Series Workloads –
blogpost
13. Яндекс открывает ClickHouse - blogpost
Спасибо за внимание!
email: Pavel.Filonov@Kaspersky.com
github: github.com/sdukshis
twitter: @filonovpv

Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Касперского)