Производительность загрузки данных

Представьте, что вы едете на электромобиле по автомагистрали, и сборщик данных под вашими ногами собирает 80 показателей каждую секунду через 80 заранее заданных индикаторов, общий объём которых составляет 2 КБ. Вы можете наблюдать за этими постоянно поступающими данными в течение одной минуты и использовать их для анализа любой интересующей вас ситуации в режиме реального времени. Однако перед этим необходимо надёжно сохранить ценные данные с помощью базы данных. Несомненно, временная база данных должна быть подключена к большому объёму данных устройств в реальном времени, и производительность загрузки играет ключевую роль!
В этом разделе вы воспользуетесь MatrixGate и MatrixBench в YMatrix для проведения мощного тестирования производительности приёма данных, чтобы обеспечить надёжную основу для последующего анализа данных.
Ниже приведена конфигурация нашей тестовой аппаратной среды. Параметры оборудования могут повлиять на параметры конфигурации инструментов. Не забудьте выбрать подходящие именно вам.

1 Аппаратная среда

Конфигурация машины следующая:

Параметры Конфигурация
Количество ядер CPU 2 физических ядра, 32 логических ядра
Платформа CPU Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
Оперативная память 256 ГБ
Объём хранилища 9.0 ТБ (запись 1.4 ГБ/сек, чтение 3.3 ГБ/сек)
Дистрибутив Linux CentOS Linux release 7.8.2003 (Core)
Ядро Linux 3.10.0-1127.el7.x86_64

2 Профессиональные инструменты

2.1 MatrixGate

MatrixGate, сокращённо mxgate — это высокопроизводительный сервер потоковой загрузки данных, расположенный в каталоге bin/mxgate в директории установки YMatrix. Этот инструмент полностью раскрывает возможности параллельной обработки распределённых баз данных и является обязательным средством для загрузки данных в производственных средах. Во время теста mxgate будет работать совместно с инструментом записи writer из mxbench, быстро записывая данные, генерируемые генератором случайных данных generator.

Дополнительную информацию см. в разделе mxgate

2.2 MatrixBench

mxbench — это инструмент нагрузочного тестирования для загрузки и запросов данных. Он позволяет настраивать и быстро генерировать случайные данные на основе количества устройств, диапазона времени, количества индикаторов и других параметров, автоматически создавать таблицы данных и выполнять загрузку и запросы данных последовательно или параллельно. Вы можете настраивать и запускать mxbench через командную строку, а также записывать конфигурацию в специальные файлы, соответствующие вашим предпочтениям. Инструмент mxbench расположен в каталоге bin/mxbench в директории установки YMatrix.

3 Метод развертывания

Автономное развертывание: Master + 6 сегментов

Примечание!
MatrixGate, MatrixBench и кластер YMatrix должны быть развернуты на одной машине.

4 Запуск теста

4.1 Тестовые случаи

Мы подготовили три тестовых сценария временных рядов с различными масштабами метрик. В конце этого раздела мы наглядно сравним скорость записи YMatrix при разных масштабах метрик.

  1. 100 000 единиц оборудования, 10 индикаторов
  2. 100 000 единиц оборудования, 100 индикаторов
  3. 100 000 единиц оборудования, 1 000 индикаторов

4.2 Запуск теста

Примечание!
Перед использованием mxbench для тестирования загрузки необходимо подготовить тестовую среду mxbench: она должна включать работающий кластер YMatrix и настроенные соответствующие переменные окружения. Этот шаг является обязательным! Ручная настройка mxgate не требуется, так как при запуске mxbench автоматически выполняется настройка и запуск mxgate.

Способы развертывания кластера см. в разделе Развертывание кластера, способы настройки mxbench — в разделе mxbench

4.2.1 100 000 устройств, 10 индикаторов

Типичная конфигурация параметров mxbench в основном делится на две части: глобальная конфигурация и локальная конфигурация на основе плагинов. Глобальная конфигурация включает два раздела: database и global; конфигурация плагинов включает генератор данных generator, инструмент записи writer и инструмент запроса benchmark.

Поскольку основная цель данного раздела — продемонстрировать производительность загрузки YMatrix, подробное описание инструмента запроса benchmark из mxbench здесь опущено.
Подробности о benchmark см. в разделе mxbench

Подробности приведены ниже:

Имя параметра Значение по умолчанию Описание параметра
--database По умолчанию значение переменной окружения PGDATABASE, если не задано — postgres Имя целевой базы данных
--db-master-port Номер порта экземпляра, должен соответствовать номеру порта, указанному в переменной окружения
--db-user Проверяет текущее имя пользователя и использует его по умолчанию Имя пользователя
--workplace /tmp/mxbench Каталог для CSV-файлов данных и файлов запросов
--watch true Включить ли наблюдение за процессом, по умолчанию включено
--simultaneous-loading-and-query false Выполнять ли загрузку и запрос одновременно. По умолчанию false. Сначала выполняется загрузка, затем запрос
--table-name Имя целевой таблицы, по умолчанию пустое, должно быть указано вручную
--tag-num 25000 Количество целевых устройств
--metrics-type float8 Тип метрики, поддерживает только "int4", "int8", "float4", "float8"
--total-metrics-count 300 Общее количество индикаторов
--ts-start Время начала генерации данных (метка времени)
--ts-end Время окончания генерации данных (метка времени)
--ts-step-in-second 1 Интервал получения индикаторов в секундах
--generator telematics Генератор случайных данных, по умолчанию генерирует данные временных рядов для сценариев интернета вещей. Можно также выбрать чтение данных из собственного файла и отправку их в mxgate для загрузки. Также допускается не генерировать никаких данных
--generator-batch-size 1 При конкретной временной метке данные каждого индикатора каждого устройства разделяются на несколько частей и загружаются в кластер. По умолчанию 1 — разделение не выполняется
--generator-disorder-ratio 0 Доля данных с задержкой передачи. Диапазон значений 0–100. По умолчанию 0 — задержек нет. Установка этого параметра позволяет имитировать любые сценарии с задержками в реальных условиях
--generator-empty-value-ratio 90 Процент пустых значений в каждой строке данных. Диапазон 0–100. По умолчанию 90, то есть 90% метрик будут пустыми. Этот параметр имитирует наличие пустых значений в реальных сценариях временных рядов
--generator-randomness OFF Случайность данных индикаторов. Четыре уровня: OFF/S/M/L. По умолчанию OFF — значения всех строк одинаковы. Случайность увеличивается по уровням SMALL, MIDDLE, LARGE
--writer http Инструмент записи данных. Позволяет выбрать режим запуска mxgate и способ получения данных от источника.

Дополнительные настраиваемые параметры можно найти в разделе mxbench или ввести mxbench --help в командной строке, чтобы увидеть полное руководство.

Используйте следующую командную строку для настройки и запуска mxbench. См. таблицу выше и скорректируйте значения параметров в соответствии с условиями. Поскольку mxgate и mxbench развернуты на одной машине, инструмент записи использует «stdin», а не сетевое соединение и передачу по сети, а напрямую использует канал, предоставляемый системой Linux. Поэтому в примере используется параметр «stdin» — он прост и удобен.

[mxadmin@mdw ~]$ mxbench run \
  --db-database "load_test" \
  --db-database "load_test" \
  --db-master-port 5432 \
  --db-master-host "mdw" \
  --db-user "mxadmin" \
  --workspace "/tmp/mxbench/workspace" \
  --watch \
  --simultaneous-loading-and-query \
  --table-name "test_table" \
  --tag-num 100000 \
  --metrics-type "float8" \
  --total-metrics-count 10 \
  --ts-start "2022-04-19 00:00:00" \
  --ts-end "2022-04-19 00:01:00" \
  --generator "telematics" \
  --generator-batch-size 1 \
  --generator-disorder-ratio 0 \
  --generator-empty-value-ratio 0 \
  --generator-randomness "OFF" \
  --writer "stdin"

Если вы не установите watch в значение «false», во время выполнения каждые 5 секунд вы сможете видеть информацию о ходе выполнения в реальном времени, а после завершения получите следующую статистику:

┌───────────────────────────────────────────────────────┐
│             Summary Report for STDIN Writer            │
├─────────────────────────────────┬─────────────────────┤
│ start time:                     │ 2022-07-21 15:14:08 │
├─────────────────────────────────┼─────────────────────┤
│ stop time:                      │ 2022-07-21 15:14:27 │
├─────────────────────────────────┼─────────────────────┤
│ size written to MxGate (bytes): │ 695333400           │
├─────────────────────────────────┼─────────────────────┤
│ lines inserted:                 │ 6000000             │
├─────────────────────────────────┼─────────────────────┤
│ compress ratio:                 │ 5.399120 : 1        │
└─────────────────────────────────┴─────────────────────┘  

Интерпретация отчёта статистики Writer:

Имя параметра Описание параметра
start time Время начала загрузки данных
end time Время окончания загрузки данных
size written to MxGate (bytes) Количество байтов данных, записанных в mxgate
lines inserted Количество вставленных строк (строк данных)
compress ratio Коэффициент сжатия, то есть отношение размера данных, записанных в mxgate, к размеру таблицы в фактической базе данных

Фактическое время выполнения зависит от общего объёма загружаемых данных и производительности машины. Пока вы не отключите функцию watch, каждые 5 секунд будет выводиться информация о ходе записи, и вы всегда сможете контролировать скорость и время записи!

Примечание!
После запуска mxbench нагрузочное тестирование продолжается до тех пор, пока все данные с временной меткой от ts-start до ts-end не будут загружены. Вы также можете нажать ctrl-c на клавиатуре, чтобы завершить выполнение досрочно.

Если вам кажется слишком сложным прямое написание длинных командных строк, вы можете выбрать следующий способ: создайте файл конфигурации mxbench.conf, запишите в него параметры и запустите.

[mxadmin@mdw ~]$ mxbench --config mxbench.conf

Примечание!
Возможно возникновение «зависания» при записи данных: информация о ходе выполнения продолжает выводиться, но фактический прогресс записи отсутствует. Не паникуйте. Вы можете выполнить следующую команду, чтобы просмотреть журнал выполнения и диагностировать проблему: cd ~/gpAdminLogs/.

4.2.2 100 000 устройств, 100 индикаторов

[mxadmin@mdw ~]$ mxbench run \
  --db-database "load_test" \
  --db-master-port 5432 \
  --db-master-host "mdw" \
  --db-user "mxadmin" \
  --workspace "/tmp/mxbench/workspace" \
  --watch \
  --simultaneous-loading-and-query \
  --table-name "test_table2" \
  --tag-num 100000 \
  --metrics-type "float8" \
  --total-metrics-count 100 \
  --ts-start "2022-04-19 00:00:00" \
  --ts-end "2022-04-19 00:01:00" \
  --generator "telematics" \
  --generator-batch-size 1 \
  --generator-disorder-ratio 0 \
  --generator-empty-value-ratio 0 \
  --generator-randomness "OFF" \
  --writer "stdin"

После завершения вы получите следующую статистику:

┌───────────────────────────────────────────────────────┐
│             Summary Report for STDIN Writer            │
├─────────────────────────────────┬─────────────────────┤
│ start time:                     │ 2022-07-21 15:19:48 │
├─────────────────────────────────┼─────────────────────┤
│ stop time:                      │ 2022-07-21 15:21:02 │
├─────────────────────────────────┼─────────────────────┤
│ size written to MxGate (bytes): │ 5555333400          │
├─────────────────────────────────┼─────────────────────┤
│ lines inserted:                 │ 6000000             │
├─────────────────────────────────┼─────────────────────┤
│ compress ratio:                 │ 25.519937 : 1       │
└─────────────────────────────────┴─────────────────────┘

4.2.3 100 000 устройств, 1 000 индикаторов

[mxadmin@mdw ~]$ mxbench run \
  --db-database "load_test" \
  --db-master-port 5432 \
  --db-master-host "mdw" \
  --db-user "mxadmin" \
  --workspace "/tmp/mxbench/workspace" \
  --watch \
  --simultaneous-loading-and-query \
  --table-name "test_table3" \
  --tag-num 100000 \
  --metrics-type "float8" \
  --total-metrics-count 1000 \
  --ts-start "2022-04-19 00:00:00" \
  --ts-end "2022-04-19 00:01:00" \
  --generator "telematics" \
  --generator-batch-size 1 \
  --generator-disorder-ratio 0 \
  --generator-empty-value-ratio 0 \
  --generator-randomness "OFF" \
  --writer "stdin"

После завершения вы получите следующую статистику:

┌──────────────────────────────────────────────────────────────────────────────┐
│ Summary Report for STDIN Writer │
├──────────────────────────┬────────────────────────────────────────────────────────� 
│ start time: │ 2022-07-21 15:22:27 │
├───────────────────────────────────────────────────────────────────────────────────� 
│ stop time: │ 2022-07-21 15:33:40 │
├───────────────────────────────────────────────────────────────────────────────────� 
│ size written to MxGate (bytes): │ 54305333400 │
├───────────────────────────────────────────────────────────────────────────────────� 
│ lines inserted: │ 6000000 │
├───────────────────────────────────────────────────────────────────────────────────� 
│ compress ratio: │ 47.488209 : 1 │
└──────────────────────────────────────────────────────────────────────────────┘

На основе приведённого выше отчёта статистики writer мы представляем вам более наглядное сравнение в виде линейного графика. Вы можете чётко понять мощную производительность загрузки данных YMatrix и то, как она растёт с увеличением масштаба индикаторов. В реальных сценариях вы можете быть уверены в выборе любого количества индикаторов.

load_performance line

Данные во временном сценарии представляют собой точку данных с атрибутом временной метки, которая указывает значение определённого индикатора в определённый момент времени. Если атрибут временной метки отсутствует, такие данные нельзя считать данными временного ряда. Поняв концепцию точки данных, вы сможете лучше понять приведённый выше график. Горизонтальная ось — различные масштабы индикаторов, установленные в тестовых случаях, соответствующие параметру total-metrics-count, вертикальная ось — скорость записи, указывающая количество точек данных, которые можно записать в секунду. Вы, вероятно, уже поняли, что по мере увеличения масштаба индикаторов скорость записи растёт очень быстро, однако при дальнейшем увеличении количества индикаторов рост скорости замедляется. Но в любом случае скорость записи YMatrix достигает миллионов. По сравнению с использованием операторов INSERT с мрачным выражением лица, почему бы не попробовать прокатиться на YMatrix по автомагистрали!