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 ответов

14 просмотров

> 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';

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

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

Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
38
Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
24
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
у меня вопрос на счет .global <name> для чего это нужно если я пишу на ассемблере? только для того что бы сделать это видимым для линкера? вот что написано в докумментации GA...
Simple Sorcerer
1
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
У меня вот только только был затык при изучении одной темы. Я настолько привык к джс, что мозг с трудом признал таки, что f и \x -> f x - это равные функции. Потому что в д...
xfides Barabanov
7
Карта сайта