- Более высокая пропускная способность при вставке данных
- Более высокая производительность фоновых слияний
- Более высокая производительность мутаций
- Более быстрые операции scale-up и scale-down
- Более легковесная строгая согласованность для запросов SELECT
Интроспекция
Большинство системных таблиц, используемых для интроспекции ReplicatedMergeTree, доступны и для SharedMergeTree, за исключениемsystem.replication_queue и system.replicated_fetches, поскольку здесь не происходит репликация данных и метаданных. Однако в SharedMergeTree есть соответствующие альтернативы этим двум таблицам.
system.virtual_parts
Эта таблица служит альтернативой system.replication_queue для SharedMergeTree. В ней хранится информация о последнем наборе текущих частей, а также о будущих частях, находящихся в обработке, например при слиянии, мутациях и удалении партиций.
system.shared_merge_tree_fetches
Эта таблица служит альтернативой system.replicated_fetches для SharedMergeTree. Она содержит информацию о текущих загрузках в память первичных ключей и контрольных сумм.
Включение SharedMergeTree
SharedMergeTree включен по умолчанию.
Для сервисов, поддерживающих движок таблицы SharedMergeTree, вручную ничего включать не нужно. Вы можете создавать таблицы так же, как и раньше, а система автоматически будет использовать движок таблицы на базе SharedMergeTree, соответствующий движку, указанному в вашем запросе CREATE TABLE.
my_table с движком таблицы SharedMergeTree.
В ClickHouse Cloud не нужно указывать ENGINE=MergeTree, так как используется default_table_engine=MergeTree. Следующий запрос идентичен приведённому выше.
CREATE TABLE, с помощью SHOW CREATE TABLE:
Настройки
Поведение некоторых настроек существенно изменилось:insert_quorum— все вставки в SharedMergeTree являются кворумными (записываются в общее хранилище), поэтому эта настройка не нужна при использовании движка таблицы SharedMergeTree.insert_quorum_parallel— все вставки в SharedMergeTree являются кворумными (записываются в общее хранилище), поэтому эта настройка не нужна при использовании движка таблицы SharedMergeTree.select_sequential_consistency— не требует кворумных вставок, но создает дополнительную нагрузку наclickhouse-keeperпри запросахSELECT
Согласованность
SharedMergeTree обеспечивает более строгую легковесную согласованность, чем ReplicatedMergeTree. При вставке в SharedMergeTree не нужно указывать такие настройки, какinsert_quorum или insert_quorum_parallel. Вставки выполняются с кворумом: метаданные сохраняются в ClickHouse-Keeper и реплицируются как минимум на кворум узлов ClickHouse-Keeper. Каждая реплика в вашем кластере будет асинхронно получать новую информацию из ClickHouse-Keeper.
В большинстве случаев использовать select_sequential_consistency или SYSTEM SYNC REPLICA LIGHTWEIGHT не следует. Асинхронная репликация покрывает большинство сценариев и отличается очень низкой задержкой. В редких случаях, когда вам критически важно исключить чтение устаревших данных, следуйте этим рекомендациям в порядке предпочтения:
-
Если вы выполняете запросы в рамках одного и того же сеанса или на одном и том же узле и для чтения, и для записи,
select_sequential_consistencyне нужен, поскольку ваша реплика уже будет иметь самые свежие метаданные. -
Если вы записываете в одну реплику, а читаете из другой, можно использовать
SYSTEM SYNC REPLICA LIGHTWEIGHT, чтобы принудительно заставить реплику получить метаданные из ClickHouse-Keeper. -
Используйте
select_sequential_consistencyкак настройку в составе запроса.
ALTER и видимость мутаций
SharedMergeTree координирует изменения метаданных через ClickHouse Keeper. Реплики получают изменённые метаданные асинхронно, поэтому изменение метаданных может стать видимым не на всех репликах сразу. Операции чтения в том же сеансе на том же узле уже используют актуальные метаданные. Если чтение нужно выполнить на другой реплике сразу после изменения метаданных, используйте SYSTEM SYNC REPLICA LIGHTWEIGHT, чтобы эта реплика получила метаданные из ClickHouse Keeper.
Операции ALTER, порождающие мутации, выполняют фоновую работу: создают новые части в общем хранилище и координируют их видимость через ClickHouse Keeper. В отличие от ReplicatedMergeTree, здесь не происходит перезаписи или передачи данных на каждой реплике по отдельности.
В ClickHouse Cloud параметр alter_sync по умолчанию равен 0; задайте его, если клиент должен дожидаться завершения операций с метаданными или перезаписи данных при MODIFY COLUMN, которая затрагивает не только метаданные. Для операций UPDATE, DELETE и MATERIALIZE ... управляйте ожиданием с помощью mutations_sync, а ход выполнения отслеживайте в system.mutations.