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

Представьте, что вы едете на электромобиле по автомагистрали. Датчик под педалью собирает 80 точек данных в секунду по 80 заранее определённым метрикам, что составляет в общей сложности 2 КБ. В течение одной минуты вы можете наблюдать эти непрерывно поступающие данные и использовать их для анализа в реальном времени. Однако перед этим необходимо надёжное хранилище — база данных, способная принять и сохранить эти ценные данные.

Очевидно, что базам временных рядов приходится обрабатывать огромные объёмы данных от множества устройств в режиме реального времени — производительность загрузки критически важна!

В этом разделе вы воспользуетесь передовыми компонентами YMatrix — MatrixGate и MatrixBench, чтобы провести мощное тестирование производительности приёмки данных и обеспечить надёжность последующего анализа.

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

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 работает совместно с компонентом записи mxbench, быстро загружая случайные данные, генерируемые генератором.

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

2.2 MatrixBench

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

3 Архитектура развертывания

Развертывание на одном сервере: Master + 6 Segments

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

4 Начало тестирования

4.1 Тестовые сценарии

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

  1. 100 000 устройств, 10 метрик
  2. 100 000 устройств, 100 метрик
  3. 100 000 устройств, 1 000 метрик

4.2 Запуск тестирования

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

Инструкции по развёртыванию кластера см. в разделе Развёртывание кластера. Информацию о настройке mxbench см. в разделе mxbench.

4.2.1 100 000 устройств, 10 метрик

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

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

Подробности о 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 Генератор случайных данных. По умолчанию генерирует данные сценария телематики. Также может читать из пользовательских файлов или пропускать генерацию
--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 (постоянные значения). Случайность возрастает от S до L
--writer http Режим записи данных. Определяет, как mxgate принимает данные

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

Используйте следующую команду для настройки и запуска mxbench. Настройте значения параметров в соответствии со своей средой. Поскольку mxgate и mxbench находятся на одной машине, использование компонента записи "stdin" позволяет избежать сетевых накладных расходов за счёт использования Linux-пайпов — легковесно и эффективно.

[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 не отключён, каждые 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        │
└─────────────────────────────────┴─────────────────────┘  

Объяснение отчёта компонента записи:

Имя параметра Описание
start time Время начала загрузки данных
stop 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       │
└─────────────────────────────────┴─────────────────────┘

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

load_performance line

Данные временных рядов состоят из помеченных временем точек — каждая представляет значение метрики в конкретный момент. Без временных меток данные нельзя считать временными рядами. Понимание структуры точек данных поможет интерпретировать приведённый выше график.

По оси X показаны различные масштабы метрик (total-metrics-count). По оси Y показана пропускная способность записи, то есть количество точек данных, записываемых в секунду. По мере увеличения числа метрик пропускная способность растёт быстро, но темпы роста замедляются при большем количестве метрик. Тем не менее, YMatrix сохраняет скорость записи на уровне миллионов. Вместо мучительной построчной вставки с помощью INSERT, почему бы не попробовать YMatrix на высокой скорости?