mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-04 21:42:39 +00:00
c56ada3200
Russian sources are updated following the english ones.
60 lines
3.8 KiB
Markdown
60 lines
3.8 KiB
Markdown
<a name="dicts-external_dicts_dict_lifetime"></a>
|
||
|
||
Обновление словарей
|
||
===================
|
||
|
||
ClickHouse периодически обновляет словари. Интервал обновления для полностью загружаемых словарей и интервал инвалидации для кэшируемых словарей определяется в теге `<lifetime>` в секундах.
|
||
|
||
Обновление словарей (кроме загрузки при первом использовании) не блокирует запросы - во время обновления используется старая версия словаря. Если при обновлении возникнет ошибка, то ошибка пишется в лог сервера, а запросы продолжат использовать старую версию словарей.
|
||
|
||
Пример настройки:
|
||
|
||
```xml
|
||
<dictionary>
|
||
...
|
||
<lifetime>300</lifetime>
|
||
...
|
||
</dictionary>
|
||
```
|
||
|
||
Настройка `<lifetime>0</lifetime>` запрещает обновление словарей.
|
||
|
||
Можно задать интервал, внутри которого ClickHouse равномерно-случайно выберет время для обновления. Это необходимо для распределения нагрузки на источник словаря при обновлении на большом количестве серверов.
|
||
|
||
Пример настройки:
|
||
|
||
```xml
|
||
<dictionary>
|
||
...
|
||
<lifetime>
|
||
<min>300</min>
|
||
<max>360</max>
|
||
</lifetime>
|
||
...
|
||
</dictionary>
|
||
```
|
||
|
||
При обновлении словарей сервер ClickHouse применяет различную логику в зависимости от типа [источника](external_dicts_dict_sources.md#dicts-external_dicts_dict_sources):
|
||
|
||
> - У текстового файла проверяется время модификации. Если время изменилось по отношению к запомненному ранее, то словарь обновляется.
|
||
> - Для таблиц типа MyISAM, время модификации проверяется запросом `SHOW TABLE STATUS`.
|
||
> - Словари из других источников по умолчанию обновляются каждый раз.
|
||
|
||
Для источников MySQL (InnoDB), ODBC можно настроить запрос, который позволит обновлять словари только в случае их фактического изменения, а не каждый раз. Чтобы это сделать необходимо выполнить следующие условия/действия:
|
||
|
||
> - В таблице словаря должно быть поле, которое гарантированно изменяется при обновлении данных в источнике.
|
||
> - В настройках источника указывается запрос, который получает изменяющееся поле. Результат запроса сервер ClickHouse интерпретирует как строку и если эта строка изменилась по отношению к предыдущему состоянию, то словарь обновляется. Запрос следует указывать в поле `<invalidate_query>` настроек [источника](external_dicts_dict_sources.md#dicts-external_dicts_dict_sources).
|
||
|
||
Пример настройки:
|
||
|
||
```xml
|
||
<dictionary>
|
||
...
|
||
<odbc>
|
||
...
|
||
<invalidate_query>SELECT update_time FROM dictionary_source where id = 1</invalidate_query>
|
||
</odbc>
|
||
...
|
||
</dictionary>
|
||
```
|