Представьте, что вы едете на электромобиле по автомагистрали. Сборщик данных в вашем автомобиле фиксирует 80 точек данных в секунду по 80 заранее определённым метрикам — всего 2 КБ. В течение одной минуты вы наблюдаете непрерывный поток поступающих данных и используете их для анализа текущих условий. Однако перед любым анализом эти ценные данные необходимо надёжно записать и сохранить в надёжной базе данных.
Безусловно, базы данных временных рядов должны обрабатывать огромные объёмы данных в реальном времени от множества устройств — производительность загрузки критически важна!
В этом разделе вы воспользуетесь передовыми компонентами MatrixGate и MatrixBench в YMatrix для тестирования высокопроизводительного приёма данных, обеспечивая надёжную загрузку данных для последующего анализа.
Ниже приведена конфигурация нашей тестовой аппаратной среды. Аппаратные характеристики могут повлиять на настройки инструментов — пожалуйста, скорректируйте их соответствующим образом.
Конфигурация машины:
| Параметр | Конфигурация |
|---|---|
| Ядра процессора | 2 физических ядра, 32 логических ядра |
| Платформа процессора | 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 через командную строку или задавать параметры в конфигурационном файле — выберите подходящий способ в зависимости от вашего рабочего процесса. Инструмент расположен по пути bin/mxbench в директории установки YMatrix.
Развертывание на одном сервере: мастер + 6 сегментов
Примечание!
MatrixGate и MatrixBench должны быть развернуты на той же машине, где находится кластер YMatrix.
Мы предлагаем три тестовых сценария с различным количеством метрик. В конце этого раздела представлено сравнение производительности записи YMatrix при разных масштабах метрик.
Примечание!
Перед использованиемmxbenchдля тестирования нагрузки убедитесь, что тестовая среда готова: кластер YMatrix должен быть запущен, а переменные окружения правильно настроены. Этот шаг обязателен.
MatrixGate не требует ручной настройки — он автоматически настраивается и запускается при стартеmxbench.
Инструкции по развертыванию кластера см. в разделе Развертывание кластера.
По настройке mxbench см. mxbench.
Параметры mxbench делятся на две части: глобальные и подключаемые локальные конфигурации. Глобальные настройки включают database и global. Подключаемые компоненты — это generator, writer и benchmark.
Так как данный раздел посвящён производительности загрузки данных, здесь мы не рассматриваем инструмент запросов benchmark.
Подробности о benchmark см. в документации mxbench.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| --database | Переменная окружения PGDATABASE, или postgres, если не задана |
Имя целевой базы данных |
| --db-master-port | Порт экземпляра, должен соответствовать значению переменной окружения | |
| --db-user | Имя текущего пользователя | Пользователь базы данных |
| --workspace | /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 | Генератор случайных данных. По умолчанию — сценарий 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 → M → 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 | Коэффициент сжатия: отношение исходного объёма входных данных к фактическому размеру таблицы в базе данных |
Фактическое время выполнения зависит от общего объёма данных и производительности машины. Пока включён --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 │
└─────────────────────────────────┴─────────────────────┘
На основе приведённых выше отчётов записи ниже представлен график для наглядного сравнения. На нём показана мощная производительность загрузки данных в YMatrix и её масштабируемость при увеличении числа метрик — это поможет вам принимать обоснованные решения о допустимом числе метрик в реальных развертываниях.
Данные временных рядов состоят из помеченных временными метками точек — каждая представляет значение метрики в конкретный момент времени. Без временных меток это не являются данными временных рядов. Понимание структуры точек данных помогает интерпретировать график.
По оси X показаны различные масштабы метрик (total-metrics-count). По оси Y — пропускная способность записи, то есть количество точек данных, записываемых в секунду. При увеличении числа метрик пропускная способность записи быстро растёт, но в конечном итоге достигает плато из-за увеличения объёма данных.
Тем не менее, YMatrix достигает производительности записи на уровне миллионов операций в секунду. Вместо мучительной построчной вставки с помощью INSERT, почему бы не ускориться вместе с YMatrix на шоссе данных?