From 2004c3755d2d4cacdc27797dec42e3a9ced9487f Mon Sep 17 00:00:00 2001 From: BayoNet Date: Thu, 27 Apr 2017 12:47:31 +0300 Subject: [PATCH 1/6] Information on was added. --- docs/ru/access_rights.rst | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/ru/access_rights.rst b/docs/ru/access_rights.rst index 66fb1811729..0987d4d8465 100644 --- a/docs/ru/access_rights.rst +++ b/docs/ru/access_rights.rst @@ -27,7 +27,7 @@ + + @@ -139,6 +151,14 @@ true + + + + expr + UInt64 + rand64() + 0 + @@ -164,18 +184,23 @@ cache Наименее эффективный способ. Подходит, если словарь не помещается в оперативку. Представляет собой кэш из фиксированного количества ячеек, в которых могут быть расположены часто используемые данные. Поддерживается источник MySQL, ClickHouse, executable, http; источник-файл не поддерживается. При поиске в словаре, сначала просматривается кэш. На каждый блок данных, все не найденные в кэше ключи (или устаревшие ключи) собираются в пачку, и с этой пачкой делается запрос к источнику вида SELECT attrs... FROM db.table WHERE id IN (k1, k2, ...). Затем полученные данные записываются в кэш. range_hashed --------- +------------ В таблице прописаны какие-то данные для диапазонов дат, для каждого ключа. Дать возможность доставать эти данные для заданного ключа, для заданной даты. -Пример: в таблице записаны скидки для каждого рекламодателя в виде: -:: - id рекламодателя дата начала действия скидки дата конца величина - 123 2015-01-01 2015-01-15 0.15 - 123 2015-01-16 2015-01-31 0.25 - 456 2015-01-01 2015-01-15 0.05 +Пример: таблица содержит скидки для каждого рекламодателя в виде: -Добавляем layout = range_hashed. -При использовании такого layout, в structure должны быть элементы range_min, range_max. + +------------------+-----------------------------+------------+----------+ + | id рекламодателя | дата начала действия скидки | дата конца | величина | + +==================+=============================+============+==========+ + | 123 | 2015-01-01 | 2015-01-15 | 0.15 | + +------------------+-----------------------------+------------+----------+ + | 123 | 2015-01-16 | 2015-01-31 | 0.25 | + +------------------+-----------------------------+------------+----------+ + | 456 | 2015-01-01 | 2015-01-15 | 0.05 | + +------------------+-----------------------------+------------+----------+ + +Добавляем ``layout = range_hashed``. +При использовании такого layout, в structure должны быть элементы ``range_min``, ``range_max``. Пример: @@ -255,12 +280,12 @@ range_hashed complex_key_hashed ----------------- +------------------ Для использования с составными ключами. Аналогичен hashed. complex_key_cache ----------- +----------------- Для использования с составными ключами. Аналогичен cache. From ffaf8c167b4a8f6ccc94930f1053c20c614341f8 Mon Sep 17 00:00:00 2001 From: BayoNet Date: Tue, 16 May 2017 15:30:31 +0300 Subject: [PATCH 6/6] Lagging replicas processing is described. Desctiption of settings application is actualized. --- docs/ru/introduction/distinctive_features.rst | 20 +++++++------- docs/ru/settings/index.rst | 17 +++++++++++- docs/ru/settings/settings.rst | 26 +++++++++++++++++++ docs/ru/table_engines/replication.rst | 12 +++++---- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/docs/ru/introduction/distinctive_features.rst b/docs/ru/introduction/distinctive_features.rst index 55e2eaca1d9..5636b6688b4 100644 --- a/docs/ru/introduction/distinctive_features.rst +++ b/docs/ru/introduction/distinctive_features.rst @@ -1,5 +1,5 @@ Отличительные возможности ClickHouse -=================================== +==================================== 1. По-настоящему столбцовая СУБД. --------------------------------- @@ -22,12 +22,12 @@ Большие запросы естественным образом распараллеливаются. 5. Распределённая обработка запроса на многих серверах. ------------------------------------------------ +------------------------------------------------------- Почти все перечисленные ранее столбцовые СУБД не поддерживают распределённую обработку запроса. В ClickHouse данные могут быть расположены на разных шардах. Каждый шард может представлять собой группу реплик, которые используются для отказоустойчивости. Запрос будет выполнен на всех шардах параллельно. Это делается прозрачно для пользователя. 6. Поддержка SQL. ---------------- +----------------- Если вы знаете, что такое стандартный SQL, то говорить о поддержке SQL всё-таки нельзя. Не поддерживаются NULL-ы. Все функции названы по-другому. Тем не менее, это - декларативный язык запросов на основе SQL и во многих случаях не отличимый от SQL. @@ -35,29 +35,29 @@ Зависимые подзапросы не поддерживаются. 7. Векторный движок. ------------------ +-------------------- Данные не только хранятся по столбцам, но и обрабатываются по векторам - кусочкам столбцов. За счёт этого достигается высокая эффективность по CPU. 8. Обновление данных в реальном времени. ------------------------ +---------------------------------------- ClickHouse поддерживает таблицы с первичным ключом. Для того, чтобы можно было быстро выполнять запросы по диапазону первичного ключа, данные инкрементально сортируются с помощью merge дерева. За счёт этого, поддерживается постоянное добавление данных в таблицу. Блокировки при добавлении данных отсутствуют. 9. Наличие индексов. ------------------ +-------------------- Наличие первичного ключа позволяет, например, вынимать данные для конкретных клиентов (счётчиков Метрики), для заданного диапазона времени, с низкими задержками - менее десятков миллисекунд. 10. Подходит для онлайн запросов. ------------------- +--------------------------------- Это позволяет использовать систему в качестве бэкенда для веб-интерфейса. Низкие задержки позволяют не откладывать выполнение запроса, а выполнять его в момент загрузки страницы интерфейса Яндекс.Метрики. То есть, в режиме онлайн. 11. Поддержка приближённых вычислений. ------------------ +-------------------------------------- #. Система содержит агрегатные функции для приближённого вычисления количества различных значений, медианы и квантилей. #. Поддерживается возможность выполнить запрос на основе части (выборки) данных и получить приближённый результат. При этом, с диска будет считано пропорционально меньше данных. #. Поддерживается возможность выполнить агрегацию не для всех ключей, а для ограниченного количества первых попавшихся ключей. При выполнении некоторых условий на распределение ключей в данных, это позволяет получить достаточно точный результат с использованием меньшего количества ресурсов. 14. Репликация данных, поддержка целостности данных на репликах. ------------------ +---------------------------------------------------------------- Используется асинхронная multimaster репликация. После записи на любую доступную реплику, данные распространяются на все остальные реплики. Система поддерживает полную идентичность данных на разных репликах. Восстановление после сбоя осуществляется автоматически, а в сложных случаях - "по кнопке". -Подробнее смотрите раздел "Репликация данных". +Подробнее смотрите раздел :ref:`table_engines-replication`. diff --git a/docs/ru/settings/index.rst b/docs/ru/settings/index.rst index 65b8816fc38..aa51d89e264 100644 --- a/docs/ru/settings/index.rst +++ b/docs/ru/settings/index.rst @@ -1,7 +1,22 @@ Настройки ========== -Здесь будут рассмотрены настройки, которые можно задать с помощью запроса SET или в конфигурационном файле. Напомню, что эти настройки могут быть выставлены в пределах сессии или глобально. Настройки, которые можно задать только в конфигурационном файле сервера, здесь рассмотрены не будут. +Описанные в разделе настройки могут быть заданы следующими способами: +* Глобально. + + В конфигурационных файлах сервера. + +* Для сессии. + + При запуске консольного клиента ClickHouse в интерактивном режиме отправьте запрос ``SET setting=value``. + +* Для запроса. + + * При запуске консольного клиента ClickHouse в неинтерактивном режиме установите параметр запуска ``--setting=value``. + * При использовании HTTP API передавайте cgi-параметры (``URL?setting_1=value&setting_2=value...``). + + +Настройки, которые можно задать только в конфигурационном файле сервера, в разделе не рассматриваются. .. toctree:: :glob: diff --git a/docs/ru/settings/settings.rst b/docs/ru/settings/settings.rst index 33783b54d1d..abb7a7c237b 100644 --- a/docs/ru/settings/settings.rst +++ b/docs/ru/settings/settings.rst @@ -30,6 +30,18 @@ ClickHouse применяет настройку в том случае, ког - Преобразует все вхождения Distributed-таблиц в соответствующие им удалённые таблицы. +.. _settings-settings-fallback_to_stale_replicas_for_distributed_queries: + +fallback_to_stale_replicas_for_distributed_queries +-------------------------------------------------- +Форсирует запрос в устаревшую реплику в случае, если актуальные данные недоступны. Смотрите :ref:`table_engines-replication`. + +Из устаревших реплик таблицы ClickHouse выбирает наиболее актуальную. + +Используется при выполнении ``SELECT`` из распределенной таблицы, которая указывает на реплицированные таблицы. + +По умолчанию - 1 (включена). + max_block_size -------------- Данные в ClickHouse обрабатываются по блокам (наборам кусочков столбцов). Внутренние циклы обработки одного блока достаточно эффективны, но при этом существуют заметные издержки на каждый блок. ``max_block_size`` - это рекомендация, какого размера блоки (в количестве строк) загружать из таблицы. Размер блока должен быть не слишком маленьким, чтобы издержки на каждый блок оставались незаметными, и не слишком большим, чтобы запрос с LIMIT-ом, который завершается уже после первого блока, выполнялся быстро; чтобы не использовалось слишком много оперативки при вынимании большого количества столбцов в несколько потоков; чтобы оставалась хоть какая-нибудь кэш-локальность. @@ -56,6 +68,20 @@ max_insert_block_size Это намного больше, чем ``max_block_size``. Это сделано, потому что некоторые движки таблиц (``*MergeTree``) будут на каждый вставляемый блок формировать кусок данных на диске, что является довольно большой сущностью. Также, в таблицах типа ``*MergeTree``, данные сортируются при вставке, и достаточно большой размер блока позволяет отсортировать больше данных в оперативке. + +.. _settings_settings_max_replica_delay_for_distributed_queries: + +max_replica_delay_for_distributed_queries +------------------------------------------ +Отключает отстающие реплики при распределенных запросах. Смотрите :ref:`table_engines-replication`. + +Устанавливает время в секундах. Если оставание реплики больше установленного значения, то реплика не используется. + +Значение по умолчанию: 0 (отключено). + +Используется при выполнении ``SELECT`` из распределенной таблицы, которая указывает на реплицированные таблицы. + + max_threads ----------- Максимальное количество потоков обработки запроса diff --git a/docs/ru/table_engines/replication.rst b/docs/ru/table_engines/replication.rst index c834bf3f351..58fd0bc0e0a 100644 --- a/docs/ru/table_engines/replication.rst +++ b/docs/ru/table_engines/replication.rst @@ -1,3 +1,5 @@ +.. _table_engines-replication: + Репликация данных ----------------- @@ -45,7 +47,7 @@ ReplicatedSummingMergeTree Если в конфигурационном файле не настроен ZooKeeper, то вы не сможете создать реплицируемые таблицы, а уже имеющиеся реплицируемые таблицы будут доступны в режиме только на чтение. -При запросах SELECT, ZooKeeper не используется. То есть, репликация никак не влияет на производительность SELECT-ов - запросы работают так же быстро, как и для нереплицируемых таблиц. +При запросах SELECT, ZooKeeper не используется. То есть, репликация никак не влияет на производительность SELECT-ов - запросы работают так же быстро, как и для нереплицируемых таблиц. При запросах к распределенным реплицированным таблицам поведение ClickHouse регулируется настройками :ref:`settings_settings_max_replica_delay_for_distributed_queries` и :ref:`settings-settings-fallback_to_stale_replicas_for_distributed_queries`. При каждом запросе INSERT (точнее, на каждый вставляемый блок данных; запрос INSERT содержит один блок, или по блоку на каждые max_insert_block_size = 1048576 строк), делается около десятка записей в ZooKeeper в рамках нескольких транзакций. Это приводит к некоторому увеличению задержек при INSERT-е, по сравнению с нереплицируемыми таблицами. Но если придерживаться обычных рекомендаций - вставлять данные пачками не более одного INSERT-а в секунду, то это не составляет проблем. На всём кластере ClickHouse, использующим для координации один кластер ZooKeeper, может быть в совокупности несколько сотен INSERT-ов в секунду. Пропускная способность при вставке данных (количество строчек в секунду) такая же высокая, как для нереплицируемых таблиц. @@ -72,8 +74,8 @@ ReplicatedSummingMergeTree Также добавляются два параметра в начало списка параметров - путь к таблице в ZooKeeper, имя реплики в ZooKeeper. -Пример: -:: +Пример: :: + ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/hits', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192) Как видно в примере, эти параметры могут содержать подстановки в фигурных скобках. Подставляемые значения достаются из конфигурационного файла, из секции macros. Пример: @@ -122,8 +124,8 @@ ReplicatedSummingMergeTree Если обнаруживается, что локальный набор данных слишком сильно отличается от ожидаемого, то срабатывает защитный механизм - сервер сообщает об этом в лог и отказывается запускаться. Это сделано, так как такой случай может свидетельствовать об ошибке конфигурации - например, если реплика одного шарда была случайно сконфигурирована, как реплика другого шарда. Тем не менее, пороги защитного механизма поставлены довольно низкими, и такая ситуация может возникнуть и при обычном восстановлении после сбоя. В этом случае, восстановление делается полуавтоматически - "по кнопке". -Для запуска восстановления, создайте в ZooKeeper узел ``/path_to_table/replica_name/flags/force_restore_data`` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: -:: +Для запуска восстановления, создайте в ZooKeeper узел ``/path_to_table/replica_name/flags/force_restore_data`` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: :: + sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data Затем запустите сервер. При старте, сервер удалит эти флаги и запустит восстановление.