Вы можете представить, что при движении на электромобиле по автомагистрали сборщик данных под вашими ногами собирает 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" — 4 типа |
| --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-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 │
└─────────────────────────────────┴─────────────────────┘
Интерпретация отчёта статистики записи:
| Имя параметра | Значение параметра |
|---|---|
| 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
Примечание!
Во время записи данных вы можете столкнуться с проблемой «зависания»: информация о ходе выполнения продолжает выводиться, но фактический прогресс записи отсутствует. Не паникуйте, вы можете выполнить следующую команду, чтобы просмотреть журнал выполнения и устранить неполадки.[mxadmin@mdw ~]$ 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 │
└──────────────────────────────────────────────────────────────────────────────┘
На основе приведённого выше отчёта статистики записи мы предлагаем вам более наглядное сравнение в виде линейного графика. Вы можете чётко понять мощную производительность загрузки данных в YMatrix и то, как она растёт с увеличением масштаба индикаторов. В реальных сценариях вы можете быть уверены в выборе любого количества индикаторов.
Данные во временных сценариях представляют собой точку данных с атрибутом временной метки, которая указывает значение определённого индикатора в определённый момент времени. Если атрибут временной метки потерян, такие данные нельзя считать временными. Поняв концепцию точки данных, вы сможете лучше понять приведённый выше график. Горизонтальная ось — различные масштабы индикаторов, установленные в тестовых случаях, соответствующие параметру total-metrics-count, вертикальная ось — скорость записи, указывающая количество точек данных, которые можно записать в секунду. Вы, вероятно, уже поняли, что по мере увеличения масштаба индикаторов скорость записи демонстрирует очень быстрый рост, однако при дальнейшем увеличении количества индикаторов рост скорости становится более ограниченным. Но в любом случае скорость записи YMatrix достигает миллионов. По сравнению с использованием операторов INSERT с мрачным выражением лица, почему бы не попробовать ехать на YMatrix по автомагистрали!