From b84f5faa4e0036d440d87f8641bc0c59b0201041 Mon Sep 17 00:00:00 2001 From: BayoNet Date: Wed, 8 Aug 2018 23:41:14 +0300 Subject: [PATCH] Quorum INSERT settings. --- docs/ru/introduction/distinctive_features.md | 2 +- docs/ru/operations/settings/settings.md | 59 ++++++++++++++++++- .../operations/table_engines/replication.md | 2 +- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/docs/ru/introduction/distinctive_features.md b/docs/ru/introduction/distinctive_features.md index c85d464222b..7920ef62ac1 100644 --- a/docs/ru/introduction/distinctive_features.md +++ b/docs/ru/introduction/distinctive_features.md @@ -57,6 +57,6 @@ ClickHouse предоставляет различные способы разм ## Репликация данных и поддержка целостности -Используется асинхронная multimaster репликация. После записи на любую доступную реплику, данные распространяются на все остальные реплики в фоне. Система поддерживает полную идентичность данных на разных репликах. Восстановление после большинства сбоев осуществляется автоматически, а в сложных случаях — полуавтоматически. +Используется асинхронная multimaster репликация. После записи на любую доступную реплику, данные распространяются на все остальные реплики в фоне. Система поддерживает полную идентичность данных на разных репликах. Восстановление после большинства сбоев осуществляется автоматически, а в сложных случаях — полуавтоматически. При необходимости, можно включить кворумную запись данных. Подробнее смотрите раздел [Репликация данных](../operations/table_engines/replication.md#table_engines-replication). diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 8d8d20a4928..333c015b83f 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -348,10 +348,65 @@ ClickHouse применяет настройку в тех случаях, ко Символ, интерпретируемый как разделитель в данных формата CSV. По умолчанию — `,`. - + -## join_use_nulls {: #settings-join_use_nulls} +## join_use_nulls Влияет на поведение [JOIN](../../query_language/select.md#query_language-join). При `join_use_nulls=1` `JOIN` ведёт себя как в стандартном SQL, т.е. если при слиянии возникают пустые ячейки, то тип соответствующего поля преобразуется к [Nullable](../../data_types/nullable.md#data_type-nullable), а пустые ячейки заполняются значениями [NULL](../../query_language/syntax.md#null-literal). + + + +## insert_quorum + +Включает кворумную запись. + + - Если `insert_quorum < 2`, то кворумная запись выключена. + - Если `insert_quorum >= 2`, то кворумная запись включена. + +Значение по умолчанию — 0. + + +**Кворумная запись** + +Для каждого блока данных, вставляемого запросом `INSERT`, Clickhouse проверяет количество реплик, в которые данные записались. Если по любой причине количество реплик не достигнет `insert_quorum`, то запись считается не состоявшейся и ClickHouse удалит вставленный блок из всех реплик, куда уже успел записать данные. + +**ClickHouse генерирует исключение** + +- Если количество доступных реплик на момент запроса меньше `insert_quorum`. +- При попытке записать данные, хотя предыдущий блок ещё не был вставлен в `insert_quorum` реплик. Эта ситуация может возникнуть, если пользователь вызвал `INSERT` прежде, чем завершился предыдущий с `insert_quorum`. + +**См. также параметры** + +- [insert_quorum_timeout](#setting-insert_quorum_timeout) +- [select_sequential_consistency](#setting-select_sequential_consistency) + + + +## insert_quorum_timeout + +Время ожидания кворумной записи. Если время прошло, а запись так не состоялась, то ClickHouse сгенерирует исключение и клиент должен повторить запрос на запись того же блока на эту же или любую другую реплику. + +По умолчанию 60 секунд. + +**См. также параметры** + +- [insert_quorum](#setting-insert_quorum) +- [select_sequential_consistency](#setting-select_sequential_consistency) + + + +## select_sequential_consistency + +Включение/выключение sequential consistency: + +- 0 — выключена. Значение по умолчанию. +- 1 — включена. + +Если sequential consistency включена, то ClickHouse гарантирует, что запрос `SELECT` к данным, записанным с [insert_quorum](#setting-insert_quorum) вернёт один и тот же блок данных с любой реплики. При этом `insert_quorum` может быть меньше количества реплик и в этом случае возможно возникновение ошибок. К примеру, если есть 3 реплики, а `insert_quorum = 2`. ClickHouse выполнит кворумную запись на две реплики, а на третью данные могут не успеть записаться за время выполнения запроса. В этом случае ClickHouse сгенерирует исключение. + +См. также параметры: + +- [insert_quorum](#setting-insert_quorum) +- [insert_quorum_timeout](#setting-insert_quorum_timeout) diff --git a/docs/ru/operations/table_engines/replication.md b/docs/ru/operations/table_engines/replication.md index 40d23b2b9ea..9a47932dbfd 100644 --- a/docs/ru/operations/table_engines/replication.md +++ b/docs/ru/operations/table_engines/replication.md @@ -56,7 +56,7 @@ Репликация асинхронная, мульти-мастер. Запросы `INSERT` (а также `ALTER`) можно отправлять на любой доступный сервер. Данные вставятся на сервер, где выполнен запрос, а затем скопируются на остальные серверы. В связи с асинхронностью, только что вставленные данные появляются на остальных репликах с небольшой задержкой. Если часть реплик недоступна, данные на них запишутся тогда, когда они станут доступны. Если реплика доступна, то задержка составляет столько времени, сколько требуется для передачи блока сжатых данных по сети. -По-умолчанию, запрос INSERT ждёт подтверждения записи только от одной реплики. Если данные были успешно записаны только на одну реплику, и сервер с этой репликой перестал существовать, то записанные данные будут потеряны. Вы можете включить подтверждение записи от нескольких реплик, используя настройку `insert_quorum`. +По-умолчанию, запрос INSERT ждёт подтверждения записи только от одной реплики. Если данные были успешно записаны только на одну реплику, и сервер с этой репликой перестал существовать, то записанные данные будут потеряны. Вы можете включить подтверждение записи от нескольких реплик, используя настройку [insert_quorum](../settings/settings.md#setting-insert_quorum). Каждый блок данных записывается атомарно. Запрос INSERT разбивается на блоки данных размером до `max_insert_block_size = 1048576` строк. То есть, если в запросе `INSERT` менее 1048576 строк, то он делается атомарно.