таблицами.
Если я правильно понял, в случае если Distributed таблица смотрит в Replicated таблицы - нужно выставлять ключ internal_replication в true, и в этом случае Distributed таблица будет вставлять данные только в первую живую реплику.
Правильно ли я понимаю, что для того чтобы и репликация работала, и шардинг - нужно указать несколько реплик в каждом из шардов, а также вручную потом сходить и объявить реплики для ReplicatedMergeTree именно на тех же серверах кластера, которые указаны в качестве реплики в remote_servers ?
в целом вы правильно поняли 1) шарды и реплики внутри шардов указываются через <remove_servers> секции в XML конфигах, чтобы данные из одного сервера реплициировались в другой надо выставлять internal_replication 2) для того чтобы проще было создавать ReplicatedMergeTree таблицы есть CREATE TABLE ... ON CLUSTER, который реплицирует DDL statements через Zookeeper 3) Distributed таблица может работать и на чтение и на запись, запись в distributed сначала разбивает данные на куски в соответствии с ключом шардирования и складывает на том сервере на котором вы INSERT запрос выполнили, а потом отсылает это все в одну из конечных реплик 4) если есть возможность разбивать данные самостоятельно, и вставлять в нужную реплику самостоятельно, то будет быстрее вставляться
никакого кластера нет. Replicated и Distributed не знают друг про друга. Поэтому делаем репликацию через Replicated. А запросы делаем через Distributed, собирая с шардов, Distributed необходимо знать про несколько (все) реплики чтобы сходить в живую. Если шард один у какой-то маленькой таблицы - дименшина и она например среплицирована 75 раз, то Distributed вообще не нужна
Спасибо за быстрый ответ, все же непонятно как мапить реплики из ReplicationMergeTree таблиц на шарды
Получается что реплики в шардировании должны накладываться на те же сервера, где есть реплики с ReplicatedMergeTree?
да, Distributed ничего не знает о том где какие данные лежат. Вы должны описать шарды и внутри шардов реплики, именно так как у вас лежат данные
Алилуйя, спасибо. Получается, что я могу иметь реплику в ReplicatedMergeTree, но если она будет не на том сервере что указан в remote_servers в реплике - Distributed таблица о ней ничего не будет знать, и хоть данные где-то будут - прочитать через Distributed их не получится
Обсуждают сегодня