Высокопроизводительный инструмент загрузки данных 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
)DISTRIBUTED 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: 4.2.0
  Your Copy is Licensed to: yMatrix.cn; 2022-03-01; any
**********************************************************
Launching MatrixGate daemon...
MatrixGate daemon started successfully

2.1.3 Submit data

After the startup is successful, use the curl tool to send an HTTP request to submit the data.

Notes!
In production environments, data is submitted using HTTP libraries supported by programming languages

The test data file rows_header.csv has been prepared, with the following content:

$ cat 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

When submitting data, the first row must specify the target table name, because the MatrixGate service may have multiple target tables.

Submit data:

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

MatrixGate binds to port 8086 by default, which can be modified through configuration files.

Query the injected data:

=# 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)

For more detailed API parameters, please refer to Document.

2.1.4 Operation and maintenance management

MatrixGate also provides other operation and maintenance commands for operation and maintenance management.

View Status

$ mxgate status
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: 4.2.0
  Your Copy is Licensed to: yMatrix.cn; 2022-03-01; any
**********************************************************
PID          15146 alive
Launched At  2021-09-01 14:59:03
Up For       26 seconds
Binary       /usr/local/matrixdb-4.2.0.community/bin/mxgated
Log          /home/mxadmin/gpAdminLogs/matrixgate.2021-09-01_145904.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: 4.2.0
  Your Copy is Licensed to: yMatrix.cn; 2022-03-01; any
**********************************************************
PID 15146 stopped

Команда mxgate stop останавливает сервис.

Наблюдение за работой сервиса

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

$ mxgate watch
**********************************************************
 __  __       _        _       ____       _
|  \/  | __ _| |_ _ __(_)_  __/ ___| __ _| |_ ___
| |\/| |/ _` | __| '__| \ \/ / |  _ / _` | __/ _ \
| |  | | (_| | |_| |  | |>  <| |_| | (_| | ||  __/
|_|  |_|\__,_|\__|_|  |_/_/\_\\____|\__,_|\__\___|
  Version: 4.5.0
  Your Copy is Licensed to: yMatrix.cn; 2022-05-14; 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: 4.5.0
  Your Copy is Licensed to: yMatrix.cn; 2022-05-14; any
**********************************************************
                TIME RANGE                | SPEED/S  | BANDWIDTH MB/S  | BLOCK ITEMS
  2022-04-28 16:00:00-2022-04-28 17:00:00 |  2208010 |         1254.48 |           0
  2022-04-28 17:00:00-2022-04-28 18:00:00 |  1157920 |         1327.00 |           0
  2022-04-28 18:00:00-2022-04-28 19:00:00 |  2228666 |         2162.32 |           0
  2022-04-28 19:00:00-2022-04-28 20:00:00 |  1371092 |         2881.30 |           0
  2022-04-28 20:00:00-2022-04-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.