Невелике порівняння продуктивності СУБД «MongoDB vs ClickHouse»

Так як колоночная СУБД ClickHouse (внутрішня розробка Яндекс) стала доступна кожному, вирішив використати цю СУБД замість MongoDB для зберігання аналітичних даних. Перед використанням зробив невеликий тест продуктивності і хочу поділитися результатами з IT співтовариством.

Для тіста використовував nodejs. Бібліотеки для СУБД під nodejs (драйвера):
ClickHouse
MongoDB

Тестував на залозі:
i5-3570
8gb DDR3 1333 MHz Kingston
CSSD-N128GB3-BK
OS: Linux Mint 18
Перед початком тесту поставив ClickHouse і MongoDB зі стандартними настройками. Створив колекцію MongoDB «testCollections» і таблицю в ClickHouse «test» з движком MergeTree. Ось структура таблиці test в ClickHouse (MongoDB структура динамічна):

create table test (event_date Date DEFAULT toDate(event_time), event_time DateTime DEFAULT now(), number UInt64, text String, month String) engine = MergeTree(event_date, (event_time, number, text, month), 8192);

Поля event_* для дат.
number — для випадкового числа.
text — для випадкового тексту.
month — для випадкового місяця.
У MongoDB буду теж вставляти подібні дані з такою ж структурою.

І ось можна починати тест. Тестові дані буду робити на «льоту», тобто вставляти дані і дивитися результати виконання вставки в мілісекундах. У тесті не буде update так як в ClickHouse немає даної операції.

Структура даних для вставки:

MongoDB
[
{ 
event_date: '2017-01-29',
event_time: '2017-01-29 16:00:40',
number: 3,
text: 'sequi voluptatibus labore',
month: 'December' 
},
...
]

ClickHouse
[
[
'2017-01-29',
'2017-01-29 16:00:40',
1,
'Et omnis consequatur id eaque suscipit error sed at. Eos ut omnis corporis unde. Tenetur ...',
'July' 
],
...
] 

Отже почнемо.

Обсяг даних: 500 тис. записів

У даному тесті будемо вставляти та вибирати дані.

— Вставка в базу даних.

MongoDB:

image

Вставка зайняла ~8289 ms.

ClickHouse:

image

Вставка зайняла ~17375 ms.

Разом 17375-8289 = 9086 ms. MongoDB швидше вставляє дані приблизно в 2 рази ніж ClickHouse.

— Вибираємо дані

Вибирати будемо скільки разів місяць «December» повторюється в таблиці (колекції).

MongoDB. Запит:

db.testCollections.aggregate([
{
"$group" : {
_id : "$month", count:{
$sum:1
}
}
}
])

Результат 300 ms:

image

ClickHouse. Запит:

SELECT month, count() AS count FROM test GROUP BY month;

Результат 42 ms:

image

Разом 300-42 = 258 ms. ClickHouse приблизно в 7 разів швидше вибирає дані з угрупованням ніж MongoDB.

Давайте зробимо ще простий select з limit 20.

MongoDB:

db.testCollections.find().limit(20);


Результат 13 ms:

image

ClickHouse:

SELECT * FROM test limit 20;

Результат 24 ms:

image

Разом за select з limit 20 ClickHouse витратив приблизно 2-е більше часу ніж MongoDB.

Давайте помножимо дані в 10 разів і повторимо тест на вибірку даних.

Обсяг даних: 5 млн. записів

У даному тесті будемо вибирати дані (тобто дані описані вище вже вставлені в обидві БД).
Результат count в обох БД:

image

— Вибираємо дані

Ті ж запити з угрупованням. MongoDB:

image

Час вибірки 3145 ms.

ClickHouse:

image

Час вибірки ms 112.

ClickHouse при даному обсязі даних в десятки разів швидше. Звичайний select з limit 20 пройшов так само як і при 500 тис. записів.

Давайте ще помножимо дані в 10 разів і повторимо тест на вибірку даних. (щось я вставив на 500 тис. записів більше, буде 50 500 000 записів).

Обсяг даних: 50,5 млн. записів

Результат count в обох БД:

image

— Вибираємо дані

Ті ж запити з угрупованням. MongoDB:

Клієнт mongodb для nodejs відпав через 35009 ms. Ось результат з GUI клієнта для роботи з MongoDB:

image

Час вибірки 1m 12.571 s.

ClickHouse:

image

Час вибірки 931 ms.

ClickHouse явно лідирує.

Резюме

ClickHouse відмінно підходить для проектів з BigData. Швидкість вибірки вражає. Дана СУБД хороший вибір для зберігання даних, пов'язаних аналітичною інформацією.

Проект з тестами: переглянути.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.