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

Привет. Скажите, пожалуйста, если у меня кластер из 3-х хостов и

есть Distributed таблица, то в плане нагрузки, если я буду ходить всегда в один и тот же хост, но в Distributed таблицу, это чем-то хуже, чем если ходить во все хосты? (понятно, что если этот конкретный хост сдохнет, то мой код сломается, но помимо этого)

15 ответов

28 просмотров

Весь поток данных пойдет через эту ноду.

.sha- Автор вопроса
Andrey Dudin
Весь поток данных пойдет через эту ноду.

это-то понятно, но Distributed таблица равномерно распределит нагрузку между всеми нодами?

.sha
это-то понятно, но Distributed таблица равномерно ...

Должно быть включено партиционирование по правильному ключу. Потому что одна партиция будет на одном шарде, и если, скажем, это city_id, то данных по одному городу будет в разы больше, чем по другому => имбаланс. Более того, для Distributed в конфиге должен быть сконфигурен кластер со всеми нодами, где у нас шардинг. Если Distributed смотрит в локальную таблицу, она даже не знает о других машинах, и абсолютно независима. Можете покурить вот это https://kb.altinity.com/altinity-kb-setup-and-maintenance/cluster-production-configuration-guide/cluster-configuration-process/

.sha- Автор вопроса
Nara
Должно быть включено партиционирование по правильн...

сейчас посмотрю. но шард у меня всего один

.sha
это-то понятно, но Distributed таблица равномерно ...

Нет. Distributed таблица сама делает очень много вычислений, она финализирует вычисления. Ваша эта нода будет сильно перегружена Если шард один, то все вычисления вообще будут только на этой ноде. Из за настройки prefer_localhost_replica

.sha
это-то понятно, но Distributed таблица равномерно ...

при SELECT ... FROM distributed GROUP BY ... ORDER BY ... на всех нодах будут запущены переписанные запросы где аггрегирующе функции будут заменены на`funcNameState` для предаггрегации и будет сделана сортировка а на ноде инициаторе дальше будет финальная аггрегация и финальная сортировка... WHERE предикаты будут проброшены на все ноды так что да, нагрузка равномерная. но если у вас запрос сложный и куча sub queries то нода инициатор будет больше нагружена по памяти и CPU и даже может в memory limit упереться

.sha- Автор вопроса
Slach [altinity]
при SELECT ... FROM distributed GROUP BY ... ORDER...

Спасибо большое! Но под нодами вы подразумеваете шарды, верно? Если у меня 1 шард и 3 реплики с одинаковыми данными, то все будет обрабатываться локально на 1 реплике, верно?

.sha
Спасибо большое! Но под нодами вы подразумеваете ш...

нет шард это группа нод (реплик), одна и более нода это процесс clickhouse-server если у вас 1 шард с одинаковыми репликами ... то при Engine=Distirbuted у вас есть нода инициатор запроса потом в соответсвии https://clickhouse.com/docs/en/operations/settings/settings/#settings-load_balancing рандомно выбирается реплика на которой в Underlying таблице делается предаггрегация... и финализируется на ноде инициаторе

.sha- Автор вопроса
Slach [altinity]
нет шард это группа нод (реплик), одна и более но...

Ясно, значит все таки есть смысл использовать Distributed — нагрузка будет +- равномерная на ноды, кроме доп нагрузке на ноду-инициатор

.sha
Ясно, значит все таки есть смысл использовать Dist...

это очень спорное утверждение) очень сильно зависит от запроса

.sha
Ясно, значит все таки есть смысл использовать Dist...

смотря как random отработает я бы тупо chproxy \ haproxy \ nginx поставил перед ... и выбирал сразу из ReplicatedMergeTree engine=Distributed нужен только если у вас несколько шардов (непересекающихся наоборов данных с одинаковой структурой) его сделать в любой момент можно он данные только временные хранит при вставке... а при select ничего не хранит

.sha
Ясно, значит все таки есть смысл использовать Dist...

да, выше правильно сказали можно ноду инициатор перегрузить финальной аггрегацией... и сортировкой... по CPU \ RAM стреляет

.sha
Ясно, значит все таки есть смысл использовать Dist...

если у вас один шард и prefer_localhost_replica=1 (по дефолту) то запросы будут выполнятся локально, остальные реплики будут курить. Distributed имеет смысл даже с одним шардом смысла ходить в один сервер всегда мало, но можно, дешевле все-таки балансировку сделать даже с DNS

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта