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

Вы можете увеличить скорость обработки 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.   Добавьте лейблы на каждый сервер, начиная с главного, где необходимо подставить нужные идентификаторы нод. Обратите внимание, что цифра после 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


  • Для более подробного вывода по "воркер" нодам, можно воспользоваться:

3. Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/visiology3.yml:

  • скопируйте секции clickhouse-1 и jdbc-bridge-1 в количестве, равном количеству ваших серверов. В скопированных секциях необходимо заменить все единицы (1) на 2, 3, 4 и т.д.
    Пример (надо заменить цифры в строках 1, 29, 39, 49, 51, 61, 71):

  • в секцию environment раздела formula-engine необходимо добавить следующие строки:

 CLICKHOUSE_HOST_2: ${CLICKHOUSE_HOST_2}

 CLICKHOUSE_HOST_3: ${CLICKHOUSE_HOST_3}

  и т.д.

4.   Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/configs/viqube2.json:

  • в секцию ClickHouseSettings.Nodes добавьте объекты:

  • Обратите внимание, что структура этого файла отличается от той, которая используется в версии 3.8.

  • Запятые должны быть во всех строках, кроме последней.

  • Не забудьте запятую после объекта "clickhouse1".

В каждой строке нужно поменять цифру на соответствующую в части 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
    и т.д.

  • Замените значения RefreshDataJob__ParallelWorkers и Hangfire__WorkerCount на количество баз данных Clickhouse, умноженное на 2, т.е. для четырех баз Clickhouse требуется указать значение 8.

  • Убедитесь, что есть пустая строка в конце файла.

6. Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/backup-service.yml:

  • Замените поле CLICKHOUSE_HOSTS на CLICKHOUSE_HOSTS: ${CLICKHOUSE_HOST_1} ${CLICKHOUSE_HOST_2} и т.д.

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

8.   Выполните следующую команду на главном сервере:

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

Изменение сервера 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) - является значением по умолчанию при создании набора данных.

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

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

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

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

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

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

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

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

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

 


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

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