Представьте, что вы едете на электромобиле по автомагистрали, и сборщик данных под вашими ногами собирает 80 показателей каждую секунду через 80 заранее заданных индикаторов, общий объём которых составляет 2 КБ. Вы можете наблюдать за этими постоянно поступающими данными в течение одной минуты и использовать их для анализа любой интересующей вас ситуации в режиме реального времени. Однако перед этим необходимо надёжно сохранить ценные данные с помощью базы данных. Несомненно, временная база данных должна быть подключена к большому объёму данных устройств в реальном времени, и производительность загрузки играет ключевую роль!
В этом разделе вы воспользуетесь MatrixGate и MatrixBench в YMatrix для проведения мощного тестирования производительности приёма данных, чтобы обеспечить надёжную основу для последующего анализа данных.
Ниже приведена конфигурация нашей тестовой аппаратной среды. Параметры оборудования могут повлиять на параметры конфигурации инструментов. Не забудьте выбрать подходящие именно вам.
Конфигурация машины следующая:
| Параметры | Конфигурация |
|---|---|
| Количество ядер 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 |
MatrixGate, сокращённо mxgate — это высокопроизводительный сервер потоковой загрузки данных, расположенный в каталоге bin/mxgate в директории установки YMatrix. Этот инструмент полностью раскрывает возможности параллельной обработки распределённых баз данных и является обязательным средством для загрузки данных в производственных средах. Во время теста mxgate будет работать совместно с инструментом записи writer из mxbench, быстро записывая данные, генерируемые генератором случайных данных generator.
Дополнительную информацию см. в разделе mxgate
mxbench — это инструмент нагрузочного тестирования для загрузки и запросов данных. Он позволяет настраивать и быстро генерировать случайные данные на основе количества устройств, диапазона времени, количества индикаторов и других параметров, автоматически создавать таблицы данных и выполнять загрузку и запросы данных последовательно или параллельно. Вы можете настраивать и запускать mxbench через командную строку, а также записывать конфигурацию в специальные файлы, соответствующие вашим предпочтениям. Инструмент mxbench расположен в каталоге bin/mxbench в директории установки YMatrix.
Автономное развертывание: Master + 6 сегментов
Примечание!
MatrixGate, MatrixBench и кластер YMatrix должны быть развернуты на одной машине.
Мы подготовили три тестовых сценария временных рядов с различными масштабами метрик. В конце этого раздела мы наглядно сравним скорость записи YMatrix при разных масштабах метрик.
Примечание!
Перед использованием mxbench для тестирования загрузки необходимо подготовить тестовую среду mxbench: она должна включать работающий кластер YMatrix и настроенные соответствующие переменные окружения. Этот шаг является обязательным! Ручная настройка mxgate не требуется, так как при запуске mxbench автоматически выполняется настройка и запуск mxgate.
Способы развертывания кластера см. в разделе Развертывание кластера, способы настройки mxbench — в разделе mxbench
Типичная конфигурация параметров 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/.
[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 │
└─────────────────────────────────┴─────────────────────┘
[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 и то, как она растёт с увеличением масштаба индикаторов. В реальных сценариях вы можете быть уверены в выборе любого количества индикаторов.
Данные во временном сценарии представляют собой точку данных с атрибутом временной метки, которая указывает значение определённого индикатора в определённый момент времени. Если атрибут временной метки отсутствует, такие данные нельзя считать данными временного ряда. Поняв концепцию точки данных, вы сможете лучше понять приведённый выше график. Горизонтальная ось — различные масштабы индикаторов, установленные в тестовых случаях, соответствующие параметру total-metrics-count, вертикальная ось — скорость записи, указывающая количество точек данных, которые можно записать в секунду. Вы, вероятно, уже поняли, что по мере увеличения масштаба индикаторов скорость записи растёт очень быстро, однако при дальнейшем увеличении количества индикаторов рост скорости замедляется. Но в любом случае скорость записи YMatrix достигает миллионов. По сравнению с использованием операторов INSERT с мрачным выражением лица, почему бы не попробовать прокатиться на YMatrix по автомагистрали!