/
Ускорение загрузки данных

Ускорение загрузки данных

Вы можете увеличить скорость обработки DAX-запросов за счет распределения данных на нескольких узлах (горизонтальное масштабирование), что позволит ускорить загрузку данных. Для этого необходимо выполнить следующие шаги:

  1. Добавьте в Docker Swarm все используемые для загрузки сервера. Для этого необходимо сделать следующее:

    • на главном сервере выполните следующую команду для получения токена соединения для рабочих узлов:

      docker swarm join-token worker
    • на остальных серверах, для добавления рабочего узла, выполните команду с полученным токеном. Например:

      docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377
    • убедитесь, что в Swarm указано нужное количество узлов:

      docker node ls
  2. Выполните скрипт /var/lib/visiology/scripts/v3/utils/make_ch_fast_loading.sh
    Данный скрипт автоматически выполнит необходимые шаги, которые вы также можете повторить, если требуется ручная настройка.

1. Добавьте метки на каждый узел, начиная с главного. Обратите внимание, что цифра после v3-clickhouse меняется:

  • docker node update --label-add=v3-clickhouse-1=true WORKER_NODE_ID_1

  • docker node update --label-add=v3-clickhouse-2=true WORKER_NODE_ID_2

  • docker node update --label-add=v3-clickhouse-3=true WORKER_NODE_ID_3

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_2

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_3

Идентификаторы узлов (WORKER_NODE_ID_…) можно получить с помощью следующей команды:

2. В файле /var/lib/visiology/scripts/v3/defaults.env измените количество узлов CLICKHOUSE_COUNT

3. В папке/var/lib/visiology/scripts/v3/extended-services создайте копии файла /var/lib/visiology/scripts/v3/visiology3-ch-1.yml в количестве, равном количеству узлов (..-ch-2.yml,..-ch-3.yml и т.д. , вместо [..] порядковый номер файла в папке)

В копиях измените node.labels.v3-clickhouse-1 (строка 15), clickhouse-1 (строка 28), JDBC_BRIDGE_HOST_1 (строка 59), SERVER_ID:1 (строка 60), v3-clickhouse-1 (строка 70), , jdbc-bridge-1 (строка 75), v3-jdbc-bridge-1 (строка 84) в соответствие с номером сервера , обозначенном в имени файла [..-ch-НОМЕР].

4. Внесите изменения в файл /var/lib/visiology/scripts/v3/custom-configs/cluster-formula-engine.json:


В каждой строке с "ConnectionString" нужно заменить цифру на соответствующую в части Host={{ env "CLICKHOUSE_HOST_1" }}

5. Внесите изменения в файл /var/lib/visiology/scripts/v3/defaults.env:

  • добавьте строки:
    CLICKHOUSE_HOST_2=clickhouse-2
    CLICKHOUSE_HOST_3=clickhouse-3
    и т.д.

  • добавьте строки:
    JDBC_BRIDGE_HOST_2=jdbc-bridge-2
    JDBC_BRIDGE_HOST_3=jdbc-bridge-3
    и т.д.

6. В файле /var/lib/visiology/scripts/v3/env-files/fe.env измените значения RefreshDataJob__ParallelWorkers и Hangfire__WorkerCount на количество узлов с базой данных Clickhouse, умноженное на 2, т.е. для четырех узлов с базой Clickhouse требуется указать значение 8.

7. Создайте файл /var/lib/visiology/scripts/v3/extended-services/ПОРЯДКОВЫЙ_НОМЕР-backup-service.yml:

поле CLICKHOUSE_HOSTS перечисляет все переменные CLICKHOUSE_HOST_.. из /var/lib/visiology/scripts/v3/defaults.env

  1. Загрузите образы clickhouse, jdbc-bridge, cadvisor, node-exporter, promtail в память докера на каждом сервере.

  2. Запустите платформу.

Изменение сервера ClickHouse для набора данных

Ранее в Visiology 3 (до версии 3.9) существовало API для изменения привязки “набор данных ↔︎ ClickHouse-сервер”. Т.е. можно было хранить разные наборы данных на разных ClickHouse-серверах.

Начиная с версии 3.9, произошли небольшие изменения в API и логики для новых наборов данных.

image-20240827-062400.png

Изменения в API

  1. Метод получения serverKey теперь возвращает массив строк, а не простую строку. Например:

image-20240827-062532.png
  1. Метод подмены serverKey теперь принимает массив строк, а не простую строку. Например:

Изменения в метаданных набора данных

  1. Свойство ServerKey, которое отвечало за сопоставление “набор данных ↔︎ ClickHouse-сервер” было удалено. Теперь функционал поддержки привязки наборов данных к ClickHouse-серверам работает немного другим образом (см. ниже). Для существующих моделей реализованы миграции и поведение остается прежним.

  2. Появилось новое свойство ServerSelectionType (число), допускающего значения:

    • Static (1)

    • Dynamic (2) - является значением по умолчанию при создании набора данных.

  3. Появилось новое свойство ActiveServerKeys (массив строк).
    Если в наборе данных ServerSelectionType = Dynamic, то при загрузке данных ClickHouse-сервер выбирается платформой автоматически.
    После загрузки данных всегда записывается значение в поле ActiveServerKeys, т.к. оно в последующем используется для осуществления DAX-запросов.

  4. Появилось новое свойство TargetServerKeys (массив строк).
    Если в наборе данных ServerSelectionType = Static, то при загрузке данных ClickHouse сервер выбирается из поля TargetServerKeys.

Настройка ClickHouse-сервера для набора данных

Для новых моделей

При создании нового набора данных через UI полю ServerSelectionType назначается значение Dynamic, что означает автоматическое определение ClickHouse-сервера.

Поэтому, если вы создаете новую модель данных и хотите использовать функционал привязки ClickHouse-серверов к набору данных, то необходимо изменить значение свойства ServerSelectionType на Static и привязать конкретный ключ сервера через метод API по уже знакомому методу.

Пример запроса на изменение ServerSelectionType у набора данных:

Для старых моделей

После перехода на 3.9 для существующих моделей менять ничего не нужно, функционал привязки сохранится как было ранее за счет миграций.


Смотрите также

Загрузка данных с помощью JDBC

 

Related content