Skip to content

postgrespro/mbench_fast_load_to_shardman

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ENGLISH:

Overview

The project purpose is to provide tool for quick test data load into distributed PostgreSQL-based database called Shardman Shardman.

How it works

At first tool creates required tables.

Test data table

Table usertable saves all test data. Here is DDL:

CREATE TABLE IF NOT EXISTS usertable(
    YCSB_KEY VARCHAR(64) PRIMARY key
  , FIELD0 VARCHAR(100)
  , FIELD1 VARCHAR(100)
  , FIELD2 VARCHAR(100)
  , FIELD3 VARCHAR(100)
  , FIELD4 VARCHAR(100)
  , FIELD5 VARCHAR(100)
  , FIELD6 VARCHAR(100)
  , FIELD7 VARCHAR(100)
  , FIELD8 VARCHAR(100)
  , FIELD9 VARCHAR(100)
  ) with (distributed_by='ycsb_key', num_parts=$PARTITION_CNT)

Monitoring table

Table monitoring_insert contains information about data load progress. Each 5 minutes tool inserts new row with count of inserted rows into test data table. Here is DDL:

create table monitoring_insert(
  ts timestamp,
  shard int,
  val bigint
);

To achieve high load speed tool uses parallel threads. It's recommended to use separate tool instance for each Shardman node to avoid cross-node interaction via FDW. example.svg

How to build

mvn package

Build result is stored in ./target/mbench_fast_load_to_shardman-1.0-SNAPSHOT-jar-with-dependencies.jar

How to execute

The following parameters are supported via environment variables and program arguments.

Environment variables:

  • SHARD_CNT - Amount of Shardman nodes
  • PARTITION_CNT - Total amount of partitions for test data table
  • BENCH_RUN_AFTER - Initial value of ID. If not specified, it will be calculated based on monitoring_insert as: (select max(val) from monitoring_insert) - 20 000 000
  • ROW_LIMIT - Target amount of rows into test data table, default - 800 000 000 000

Please specify path to routine psql into environment variable PATH

Program arguments:

  • -U database username
  • -P database user password
  • -d database name
  • -h database host
  • -w amount of parallel threads per Shardman node / tool instance
  • -v ID of Shardman node: 0 <= v < SHARD_CNT. Important to set it to make routine correctly identify for particular node.
  • -t Timeout (in seconds). Row generation stops after timeout or amount of rows in test data table reachs ROW_LIMIT.

Example

Shardman cluster contains 7 nodes. We want to have 10 partitions per node (70 in total) and fill node with ID=1 by 40 concurrent nodes during 12 hours (43200 seconds)

export SHARD_CNT=7
export PARTITION_CNT=70
java -Xmx512M -cp ./target/mbench_fast_load_to_shardman-1.0-SNAPSHOT-jar-with-dependencies.jar tests.YahooLoader -U postgres -P shardman-petabyte-scale-2025 -d postgres -w 40 -v 1 -t 43200 -h localhost

Data generation restart

It's safe to restart java process at any moment

However, to avoid redundant work and save time, recommends:

  • Wait for fresh row in monitoring_insert
  • After row appearance, terminate/stop process (kill it by SIGTERM/SIGSTOP)
  • Restart java process

РУССКИЙ:

О Проекте

Проект создан для быстрой загрузки тестовых данных в распределенной реляционной СУБД Shardman.

Как это работает

При запуске автоматически создаются необходимые таблицы.

Основная таблица для тестовых данных

В таблице usertable будут храниться тестовые данные. Она создается с помощью следующего SQL-запроса:

CREATE TABLE IF NOT EXISTS usertable(
    YCSB_KEY VARCHAR(64) PRIMARY key
  , FIELD0 VARCHAR(100)
  , FIELD1 VARCHAR(100)
  , FIELD2 VARCHAR(100)
  , FIELD3 VARCHAR(100)
  , FIELD4 VARCHAR(100)
  , FIELD5 VARCHAR(100)
  , FIELD6 VARCHAR(100)
  , FIELD7 VARCHAR(100)
  , FIELD8 VARCHAR(100)
  , FIELD9 VARCHAR(100)
  ) with (distributed_by='ycsb_key', num_parts=$PARTITION_CNT)

Таблица для мониторинга

В таблицу monitoring_insert записывается информация о процессе вставки данных. Каждые 5 минут в нее добавляются данные о количестве вставленных строк в таблицу usertable:

create table monitoring_insert(
  ts timestamp,
  shard int,
  val bigint
);

Для достижения высокой скорости загрузки данных используется параллельная вставка: в каждой ноде Shardman`а запускается отдельный экземпляр приложения, что позволяет эффективно вставлять данные именно в эту ноду не используя FDW. example.svg

Как собрать

mvn package

Результат сборки в ./target/mbench_fast_load_to_shardman-1.0-SNAPSHOT-jar-with-dependencies.jar

Как запустить

Параметры, которые нужно задать перед запуском:

Переменные окружения:

  • SHARD_CNT - Задаёт количество нод
  • PARTITION_CNT - Задаёт общее количество секций для секционированной таблицы
  • BENCH_RUN_AFTER - Задаёт начальный id с которого будем генерировать. Если его не указать, то он будет высчитываться из таблицы monitoring_insert как: (select max(val) from monitoring_insert) - 20 000 000
  • ROW_LIMIT - Задаёт лимит строк. По умолчанию 800 000 000 000
  • В PATH обязательно должен быть путь до psql

Аргументы приложения:

  • -U Пользователь, который подключается к СУБД
  • -P Пароль, с которым пользователь подключается к СУБД
  • -d Имя базы данных
  • -h Хост СУБД
  • -w Количество параллельных воркеров, на одной ноде
  • -v номер ноды: 0 <= v < SHARD_CNT. Важный параметр, поскольку именно с помощью него определяются записи для текущей ноды
  • -t Ограничение времени выполнения (в секундах). Генерация остановится, когда будет достигнут лимит времени или ROW_LIMIT.

Пример:

export SHARD_CNT=7
export PARTITION_CNT=70
java -Xmx512M -cp ./target/mbench_fast_load_to_shardman-1.0-SNAPSHOT-jar-with-dependencies.jar tests.YahooLoader -U postgres -P shardman-petabyte-scale-2025 -d postgres -w 40 -v 1 -t 43200 -h localhost

Перезапуск

Процесс java можно остановить в любой момент.

Однако, чтобы избежать лишней работы, рекомендуется:

  • Дождаться появления новой записи в таблице monitoring_insert
  • Сразу после появления записи остановить процесс java
  • Запустить генерацию заново по инструкции выше

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages