DATA_ENGINEERETTE Telegram 410
Разбираемся в движках клика

Этот день настал, и я наконец-то поняла, что происходит с разными движками в кх 🕺

Возьмем такую конфигурацию кластера: 2 шарда по 2 реплики. И для примера 3 движка: MergeTree, ReplicatedMergeTree, Distributed

Подключаемся к 1му хосту, создаем 6 таблиц на кластере. Чтобы результаты не мешали друг другу, под Distributed создаем отдельные свежие чистые таблички:

1) MergeTree
ENGINE MergeTree()


2) ReplicatedMergeTree
ENGINE ReplicatedMergeTree()


3) Distributed поверх MergeTree
ENGINE = Distributed(local_cluster, default, mt_table, rand())


4) Distributed поверх ReplicatedMergeTree
ENGINE = Distributed(local_cluster, default, rmt_table, rand())


Каждая таблица теперь существует на каждом хосте, потому что мы создали на всем кластере. Инсертим 10к строк данных и сравним

Что получается?

🎈MergeTree
Данные хранятся только на том хосте, на котором мы заинсертили. На остальных 0

🎈ReplicatedMergeTree
Данные хранятся на всех репликах одного шарда. На остальных шардах 0

🎈Distributed
Данные вообще не хранит, они лежат в исходной таблице. В каком-то смысле это как view

Если в основе MergeTree - то данные будут на одной из реплик в шарде. В нашем случае это replica1 для shard1 и replica2 для shard2
Когда мы делаем count(), рандомно выбирается одна реплика из каждого шарда. Т.е. на нашем кластере возможны 4 комбинации:

1 + 3 = 5030 + 0 = 5030
1 + 4 = 5030 + 4970 = 10000
2 + 3 = 0 + 0 = 0
2 + 4 = 0 + 4970 = 4970


Это значит, что при каждом новом запросе, например, для хоста 3 мы можем получить либо 5030 строк, либо 0

Если в основе ReplicatedMergeTree - то между репликами будет одинаковое количество строк, но между шардами разное. А при запросе к distributed всегда будет участвовать одинаковое количество строк

🌷Поэтому если нужно получать консистентные данные, обеспечивать отказоустойчивость - используем Distributed на базе ReplicatedMergeTree и селектим из Distributed
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥5🤔4😁11



tgoop.com/data_engineerette/410
Create:
Last Update:

Разбираемся в движках клика

Этот день настал, и я наконец-то поняла, что происходит с разными движками в кх 🕺

Возьмем такую конфигурацию кластера: 2 шарда по 2 реплики. И для примера 3 движка: MergeTree, ReplicatedMergeTree, Distributed

Подключаемся к 1му хосту, создаем 6 таблиц на кластере. Чтобы результаты не мешали друг другу, под Distributed создаем отдельные свежие чистые таблички:

1) MergeTree

ENGINE MergeTree()


2) ReplicatedMergeTree
ENGINE ReplicatedMergeTree()


3) Distributed поверх MergeTree
ENGINE = Distributed(local_cluster, default, mt_table, rand())


4) Distributed поверх ReplicatedMergeTree
ENGINE = Distributed(local_cluster, default, rmt_table, rand())


Каждая таблица теперь существует на каждом хосте, потому что мы создали на всем кластере. Инсертим 10к строк данных и сравним

Что получается?

🎈MergeTree
Данные хранятся только на том хосте, на котором мы заинсертили. На остальных 0

🎈ReplicatedMergeTree
Данные хранятся на всех репликах одного шарда. На остальных шардах 0

🎈Distributed
Данные вообще не хранит, они лежат в исходной таблице. В каком-то смысле это как view

Если в основе MergeTree - то данные будут на одной из реплик в шарде. В нашем случае это replica1 для shard1 и replica2 для shard2
Когда мы делаем count(), рандомно выбирается одна реплика из каждого шарда. Т.е. на нашем кластере возможны 4 комбинации:

1 + 3 = 5030 + 0 = 5030
1 + 4 = 5030 + 4970 = 10000
2 + 3 = 0 + 0 = 0
2 + 4 = 0 + 4970 = 4970


Это значит, что при каждом новом запросе, например, для хоста 3 мы можем получить либо 5030 строк, либо 0

Если в основе ReplicatedMergeTree - то между репликами будет одинаковое количество строк, но между шардами разное. А при запросе к distributed всегда будет участвовать одинаковое количество строк

🌷Поэтому если нужно получать консистентные данные, обеспечивать отказоустойчивость - используем Distributed на базе ReplicatedMergeTree и селектим из Distributed

BY дата инженеретта




Share with your friend now:
tgoop.com/data_engineerette/410

View MORE
Open in Telegram


Telegram News

Date: |

Informative As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. Ng, who had pleaded not guilty to all charges, had been detained for more than 20 months. His channel was said to have contained around 120 messages and photos that incited others to vandalise pro-government shops and commit criminal damage targeting police stations. The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. Unlimited number of subscribers per channel
from us


Telegram дата инженеретта
FROM American