Высокопроизводительный инструмент загрузки данных MatrixGate

MatrixGate, сокращённо mxgate — это высокопроизводительный инструмент загрузки данных, поставляемый вместе с YMatrix. Он расположен в каталоге bin/mxgate установочного директории YMatrix и на данный момент поддерживает загрузку данных через интерфейсы SDK, HTTP и STDIN API. Поддерживаемые форматы данных: TEXT и CSV.
Производительность загрузки данных с использованием mxgate значительно выше, чем у родного оператора INSERT. Это связано с тем, что mxgate может напрямую взаимодействовать с Segment, избегая узкого места в виде единой точки Master.

В настоящее время mxgate в основном поддерживает следующие функции:


1 Принцип работы MatrixGate

Логика загрузки данных с помощью MatrixGate показана на рисунке ниже:

Схема MatrixGate

  1. Система сбора данных собирает данные с оборудования или принимает данные, отправленные оборудованием.
  2. Система сбора непрерывно передаёт данные в процесс службы mxgate в режиме параллельных микропакетов.
  3. Процесс mxgate эффективно взаимодействует с процессом главного узла (Master) YMatrix, обмениваясь информацией о транзакциях и управлении.
  4. Данные отправляются напрямую на узлы данных (Segment) и записываются параллельно с высокой скоростью.

Сравнение INSERT и MatrixGate:

Метод записи Преимущества Недостатки Применимые сценарии
Прямой INSERT Простой интерфейс Низкая пропускная способность Низкая производительность, сотни тысяч точек данных/секунду
MatrixGate Высокая пропускная способность
Стандартная работа в реальном времени
Требуется дополнительное развертывание, затраты на эксплуатацию и обслуживание Высокая производительность, десятки миллионов точек данных/секунду

2 Использование MatrixGate

MatrixGate предоставляет следующие режимы работы:

  • Режим службы
  • Командный режим
  • Режим миграции

Ниже показано, как использовать эти два режима для загрузки данных в таблицу. Структура таблицы dest следующая:

=# CREATE TABLE dest(
    time timestamp,
    c1 int,
    c2 text
)USING MARS3
DISTRIBUTED BY(c1)
ORDER BY(c1);

2.1 Режим службы

Режим службы предполагает постоянное выполнение фонового процесса, предоставляющего пользователю HTTP-интерфейс для отправки последовательных данных. Это наиболее распространённый способ использования в производственных средах.

2.1.1 Генерация конфигурационных файлов

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

$ mxgate config --db-database test \
            --db-master-host localhost \
            --db-master-port 5432 \
            --db-user mxadmin \
            --target public.dest \
            --time-format raw \
            --delimiter ',' \
            > mxgate.conf

Как указано в команде выше:

Параметр Описание Значение
--db-database База данных test
--db-master-host Хост базы данных localhost
--db-master-port Порт базы данных 5432
--db-user Имя пользователя базы данных mxadmin
--target Целевая таблица public.dest
--time-format Формат времени raw (обычный текст)
--delimiter Разделитель ,

2.1.2 Запуск MatrixGate

Затем запустите MatrixGate, указав в параметрах запуска только что созданный конфигурационный файл:

$ mxgate start --config mxgate.conf
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: v5.1.0
  Your Copy is Licensed to: yMatrix.cn; 2023-10-25; any
**********************************************************
Launching MatrixGate daemon...
MatrixGate daemon started successfully

2.1.3 Отправка данных

После успешного запуска используйте инструмент curl для отправки HTTP-запроса с данными.

Примечание!
В производственных средах данные отправляются с использованием HTTP-библиотек, поддерживаемых языком программирования.

Создайте тестовый файл данных rows_header.csv:

$ vi rows_header.csv

Его содержимое:

public.dest
2021-01-01 00:00:00,1,a1
2021-01-01 00:00:00,2,a2
2021-01-01 00:00:00,3,a3

При отправке данных первая строка должна указывать имя целевой таблицы, поскольку служба MatrixGate может обслуживать несколько целевых таблиц.

Отправьте данные:

$ curl http://localhost:8086/ -X POST -H 'Content-Type: text/plain' --data-binary "@rows_header.csv"

По умолчанию MatrixGate привязывается к порту 8086, который можно изменить через конфигурационный файл.

Запросите загруженные данные:

=# SELECT * FROM dest;
        time         | c1 | c2
--------------------+-------------------------------------------------------------------------------------------------------------
 2021-01-01 00:00:00 | 11 | a11
 2021-01-01 00:00:00 | 12 | a12
 2021-01-01 00:00:00 | 13 | a13
(3 rows)

Более подробную информацию о параметрах API см. в документации.

2.1.4 Управление эксплуатацией и обслуживанием

MatrixGate также предоставляет дополнительные команды для управления эксплуатацией и обслуживанием.

Просмотр состояния

$ mxgate status
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: v5.1.0
  Your Copy is Licensed to: yMatrix.cn; 2023-10-25; any
**********************************************************
PID          29429 alive
Launched At  2023-07-26 08:26:22
Up For       4 minutes 12 seconds
Binary       /opt/ymatrix/matrixdb5/bin/mxgated
Log          /home/mxadmin/gpAdminLogs/matrixgate.2023-07-26_082622-29429.log
Config       /home/mxadmin/mxgate.conf

You can see the service program running status, configuration files and log paths, which are used to track down problems.

Stop service

$ mxgate stop
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: v5.1.0
  Your Copy is Licensed to: yMatrix.cn; 2023-10-25; any
**********************************************************
PID 29429 stopped

Мониторинг службы

Вы можете использовать подкоманду mxgate watch для наблюдения за службой в реальном времени:

$ mxgate watch
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version:v5.1.0
  Your Copy is Licensed to: yMatrix.cn; 2023-10-25; any
**********************************************************
watch cmd will run forever until killed, you can use watch -T n to change the duration to n seconds;and you can use mxgate watch --info to get info of columns;
                 Time          WCount          ICount        WSpeed/s        ISpeed/s  WBandWidth MB/S     BlocakItems
  2022-04-28 15:20:58        14478858        14527011         2598081         2627887            2395               0
  2022-04-28 15:21:01        22231035        22633254         2584059         2702081            2222               0
  2022-04-28 15:21:04        30494310        30500874         2754425         2622540            3551               0
  2022-04-28 15:21:07        38004210        38032956         2503300         2510694            2862               0
  2022-04-28 15:21:10        46188696        46298223         2728162         2755089            2227               0
  ...

Или используйте mxgate watch --history для просмотра исторических данных:

$ mxgate watch --history
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: v5.1.0
  Your Copy is Licensed to: yMatrix.cn; 2023-10-25; any
**********************************************************
                TIME RANGE                | SPEED/S  | BANDWIDTH MB/S  | BLOCK ITEMS
  2023-07-28 16:00:00-2023-07-28 17:00:00 |  2208010 |         1254.48 |           0
  2023-07-28 17:00:00-2023-07-28 18:00:00 |  1157920 |         1327.00 |           0
  2023-07-28 18:00:00-2023-07-28 19:00:00 |  2228666 |         2162.32 |           0
  2023-07-28 19:00:00-2023-07-28 20:00:00 |  1371092 |         2881.30 |           0
  2023-07-28 20:00:00-2023-07-28 21:00:00 |  1575320 |         2608.20 |           0


2.2 Command Line Mode

Command line mode is used to pour data files into one go, and the process exits after the end.

It's still the data file just now. Remove the first row of the target table, only keep the data rows, and execute the following command:

$ cat rows.csv | mxgate --source stdin --db-database test --db-master-host localhost --db-master-port 5432 --db-user mxadmin --time-format raw --target public.dest --parallel 2  --delimiter ',' 

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


2.3 Режим миграции

Режим миграции mxgate主要用于用于 однонаборных таблиц с высокой скоростью переноса данных и поддерживает миграцию таблиц данных из других кластеров Greenplum 5, Greenplum 6 и YMatrix в текущий кластер YMatrix. В настоящее время существует три основных варианта использования:

  • Миграция одной таблицы
  • Экспорт в файл
  • Миграция с фильтрацией

Примечание!
Подробности об использовании режима миграции см. в разделе Инструмент миграции одной таблицы — mxgate, а метод полной миграции базы данных — в разделе Инструмент миграции всей базы данных — mxshift.

Примечание!
Полное описание инструмента MatrixGate см. в разделе MatrixGate.