184 похожих чатов

Привет! Во-первых, спасибо разработчикам ClickHouse, действительно клевая база данных. Есть

несколько вопросов.

Дано:

* Одна нода - сервер на DO 16 CPU, 32 GB RAM, attached volume на 3 ТБ
* Таблица 5 млрд записей

CREATE TABLE impression.impression (
`date` Date,
`timestamp` DateTime,
`unique_id` UUID,
`client` String,
`campaign` String,
`publisher` String,
`application` String,
`click_id` String,
`os_name` String,
`os_version` String,
`pclick` String,
`idfa` String,
`gaid` String,
`ip_address` String,
`country_code` FixedString(2),
`city` String,
`isp` String,
`latitude` Float64,
`longitude` Float64,
`referrer` String,
`user_agent` String
) ENGINE = MergeTree(date, unique_id, 8192)
* Запись в таблицу производится с нескольких серверов батчами по 10к записей


1. Первоначально требовалось быстро искать по полю unique_id. Поэтому именно это поле я и выбрал как первичный ключ. Позже появилось требование искать еще по полю click_id. Пытался разметить таблицу следующим образом: ENGINE MergeTree() PARTITION BY date ORDER BY (date, unique_id, click_id) SETTINGS index_granularity=8192. Но это не помогло. Подскажите, какой первичный ключ (ключ сортировки) надо было выбрать? Или CH для этого класса задач не подходит? Вообще стоило ли добавлять date в начало ключа сортировки?

2. Второй класс задач - группировки (GROUP BY) по различным полям (дата, client, campaign, publisher, ...) с фильтрацией (WHERE по выбранным client, campaign, publisher) за определенный период времени. Что наилучшим образом повлияет на ускорение запросов? MatView, репликация, шардирование, иной Primary Key?

3. Планирую переход с одной ноды на кластер. Сейчас в таблицу записывается 200 млн/сутки, в перспективе будет 1 млрд/сутки. Порекомендуйте, пожалуйста, конфигурацию кластера и характеристики серверов.

2 ответов

2 просмотра

PARTITION BY date ORDER BY (date, date в ORDER BY смысла не имеет, там всегда одно значение, из-за PARTITION BY date 1. Если действительно хочется быстро искать (это вообще неправильный вопрос для OLAP), делайте две таблицы одна ORDER BY unique_id вторая ORDER BY click_id и все храните два раза. Но проблема в вашем неправильном желании. Скоро появится zorder индекс который несколько облегчит. 2. фильтровать через таблицу отсортированную по creative_id, который вычисляется из client, campaign, publisher 3. 700 серверов, в каждом по 600ГБ озу

Armenak-֍ Автор вопроса

Подскажите, delta encoding можно применить к полю timestamp? LowCardinality был бы эффективен для поля user_agent, как я понял из вебинара Secrets of ClickHouse Query Performance by Altinity Ltd...

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
@FAssembler ты много с формами работал, как цикл обработки сообщений от окошек надо делать, чтобы IsDialogMessage не ломал ввод в эдиты и навигация по табам работала?
The Bird of Hermes
8
Карта сайта