Quorum INSERT settings.

This commit is contained in:
BayoNet 2018-08-08 23:41:14 +03:00
parent eaffe23d25
commit b84f5faa4e
3 changed files with 59 additions and 4 deletions

View File

@ -57,6 +57,6 @@ ClickHouse предоставляет различные способы разм
## Репликация данных и поддержка целостности
Используется асинхронная multimaster репликация. После записи на любую доступную реплику, данные распространяются на все остальные реплики в фоне. Система поддерживает полную идентичность данных на разных репликах. Восстановление после большинства сбоев осуществляется автоматически, а в сложных случаях — полуавтоматически.
Используется асинхронная multimaster репликация. После записи на любую доступную реплику, данные распространяются на все остальные реплики в фоне. Система поддерживает полную идентичность данных на разных репликах. Восстановление после большинства сбоев осуществляется автоматически, а в сложных случаях — полуавтоматически. При необходимости, можно включить кворумную запись данных.
Подробнее смотрите раздел [Репликация данных](../operations/table_engines/replication.md#table_engines-replication).

View File

@ -348,10 +348,65 @@ ClickHouse применяет настройку в тех случаях, ко
Символ, интерпретируемый как разделитель в данных формата CSV. По умолчанию — `,`.
<!--a name="settings-join_use_nulls"></a-->
<a name="settings-join_use_nulls"></a>
## 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).
<a name="setting-insert_quorum"></a>
## 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)
<a name="setting-insert_quorum_timeout"></a>
## insert_quorum_timeout
Время ожидания кворумной записи. Если время прошло, а запись так не состоялась, то ClickHouse сгенерирует исключение и клиент должен повторить запрос на запись того же блока на эту же или любую другую реплику.
По умолчанию 60 секунд.
**См. также параметры**
- [insert_quorum](#setting-insert_quorum)
- [select_sequential_consistency](#setting-select_sequential_consistency)
<a name="setting-select_sequential_consistency"></a>
## 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)

View File

@ -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 строк, то он делается атомарно.