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

Кажется, имеется типовая задача вводная: есть много событий от некоторых источников. свойства

источников:
1. список источников открыт (т.е. в процессе сбора данных иногда могут появляться новые источники), но не будет бурного роста их числа. Скажем, количество источников - единицы десятков тысяч. Количество событий: миллионы, сотни миллионов.
2. источник в событии идентифицируется строкой (обычно это 50...300 символов)

запросы к системе будут:
1. Как по общему набору событий (какие-то агрегации)
2. Так и выборки по конкретным источникам

вопросы:
1. По привычке хочется пронумеровать источники и нормализовать схему. Надо ли это делать в clickhouse?
2. Если нормализовать надо (выгодно), то как это сделать на лету?

что-то такое сходу набросал (https://www.db-fiddle.com/f/f6k6T5rJnN3yt3php9QrN6/0):

-- сюда будут писаться миллионы (миллиарды?) записей
create table myDb.event_buffer
(
event_prop1 String,
-- ...
event_propN String,
event_source String -- строка обычно на 50...300 символов
) engine = Kafka -- например, читаем из kafka
;

create table myDb.event
(
event_source_id UInt64
event_prop1 String,
-- ...
event_propN String,
) engine MergeTree();

-- уникальных значений name ожидатся в районе нескольких десятков тысяч
create table myDb.event_source
(
id UInt64,
name String
) engine -- КАКОЙ ВЫБРАТЬ?

create materialized view myDb.event_extractor to myDb.event as
select
sipHash64(event_source) as event_source_id,
event_prop1, /* ... */, event_propN
from myDb.event_buffer;

create materialized view myDb.event_souce_extractor to myDb.event_source as
select
sipHash64(event_source) as id,
event_source as name
from myDb.event_buffer;


это похоже на рабочую схему? В ней для myDb.event_source какой движок выбрать, чтобы обеспечить уникальность строк таблицы?

3 ответов

23 просмотра

> myDb.event_source ... engine -- КАКОЙ ВЫБРАТЬ? если кластер, то вариантов немного - ReplicatedReplacingMT. Если singleserver, то я бы попробовал Join(Any,Left,id) settings join_any_take_last_row=1 Но даже если и кластер, то при наличии кафки можно паралельно несколько таких таблиц поддерживать на нодах

Alex-Spiridonov Автор вопроса
Boris
> myDb.event_source ... engine -- КАКОЙ ВЫБРАТЬ?...

Join(Any,Left,id) settings join_any_take_last_row=1 а мощность event_source не будет равна мощности таблицы в этом случае? типа в event 100М и в event_source получим 100М

Alex Spiridonov
Join(Any,Left,id) settings join_any_take_last_row=...

тут же Any. Там хеш таблица. Одна строка для одного id. По умолчанию - первая, с указанным сеттингом - последняя. Вы же говорили что источников десятки тысяч - это нормально. Вот так проверить сколько займет RAM: SELECT name, formatReadableSize(total_bytes) FROM system.tables WHERE engine = 'Join';

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта