Немножко про колоночные DB

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Некоторое время назад озадачился выбором ColumnStore DB из возможных вариантов MariaDB (CoumnStore) - стоит в продакшене и после долгих мучений был выбран Yandex ClickHouse.
Особенность - очень много INSERT, UPDATE/DELETE - нет, SELECT редкие но затрагивают большое количество строк (в среднем ~42 млн.)

К цифрам:
датасет - 2.656.035.309 записей (360 GB) (для теста, логи за месяц)

импорт:
Maria ColumnStorge (144 мин.)
YCH (157 мин.)

Коэф. сжатия
MCS - 64%
YCH - 82%

SELECT типично необходимая выборка
MCS ~ 2 мин.
YCH ~ 0.01 сек.

Разница значительная, но есть нюанс, MCS нельзя создать индексы, вместо этого у нее есть метаданные (словарь), который она хранит в оперативке. (на тесте было 16 гб. что вполне влияет на время) (отвратительный артефакт - очень большой warming up). У YCH - есть возможность создавать индексы.
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Это вот прям не шло в рамках PHP, это в рамках проекта "Яровой", хранение посещений пользователей/блокировки и представление инф. по запросу. сам-то проект писал на c++, но вот с БД были вопросы, а результат показался интересным для его озвучивания, тем более как-то мало инф. о колоночных ДБ и реальных тестах и данных по ним.
 

AnrDaemon

Продвинутый новичок
Я как-то раньше не сталкивался с этим термином, хотелось бы послушать несколько подробнее.
 

AnrDaemon

Продвинутый новичок
Быстрый гуглёж показал, что это нечто вроде нормализации таблицы на уровне БД?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Если речь о колоночных, то это способ хранения данных, т.е. данные хранятся не по строкам, а по столбцам, для простоты понимания - один файл = одному столбцу, такой способ хранения позволяет делать очень быстрые выборки и операции на ними, к примеру если взять числовое значение которое может быть в диапазоне 0-3, то в строковой ДБ, оно будет присутствовать в каждой строке, для получение уникальных значений нам надо проходить по всем строкам (ну и т.д.), в колоночных-же в зависимости от движка (и моей достаточно вольной интерпретации), мы по сути получаем уникальные значения не пробегаясь по всем строкам (словарь в MariaDB), + интересна особенность сжатия подряд идущие одинаковые значения, могут быть представлены как <значение>,<количество повторений>. затраты на операции записи\чтения поиска, существенно снижаются.

но за все надо платить, UPDATE\DELETE - очень дорогие операции. в некоторых колоночных DB они могут в принципе не поддерживаться.

это довольно вольная интерпретация
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
как я понял, смысл ClickHouse в том, что его можно расшардить между пачкой машин, и пропорционально ускорить добавление
 
Сверху