Skip to content

Commit 96f009d

Browse files
committed
Init commit
0 parents  commit 96f009d

29 files changed

+2304
-0
lines changed

.gitignore

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
target/
2+
!.mvn/wrapper/maven-wrapper.jar
3+
!**/src/main/**/target/
4+
!**/src/test/**/target/
5+
6+
### IntelliJ IDEA ###
7+
.idea/
8+
*.iws
9+
*.iml
10+
*.ipr
11+
12+
### Eclipse ###
13+
.apt_generated
14+
.classpath
15+
.factorypath
16+
.project
17+
.settings
18+
.springBeans
19+
.sts4-cache
20+
21+
### NetBeans ###
22+
/nbproject/private/
23+
/nbbuild/
24+
/dist/
25+
/nbdist/
26+
/.nb-gradle/
27+
build/
28+
!**/src/main/**/build/
29+
!**/src/test/**/build/
30+
31+
### VS Code ###
32+
.vscode/
33+

LICENSE

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
mbench_fast_load_to_shardman is released under the PostgreSQL License, a liberal Open Source license, similar to the BSD or MIT licenses.
2+
3+
Copyright (c) 2014-2025, Postgres Professional
4+
Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
5+
Portions Copyright (c) 1994, The Regents of the University of California
6+
7+
Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.
8+
9+
IN NO EVENT SHALL POSTGRES PROFESSIONAL BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF POSTGRES PROFESSIONAL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
10+
11+
POSTGRES PROFESSIONAL SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND POSTGRES PROFESSIONAL HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

README.md

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
## О Проекте
2+
Проект создан для быстрой загрузки тестовых данных в распределенной реляционной СУБД [Shardman](https://postgrespro.ru/products/shardman).
3+
## Как это работает
4+
5+
При запуске автоматически создаются необходимые таблицы.
6+
7+
### Основная таблица для тестовых данных
8+
В таблице usertable будут храниться тестовые данные. Она создается с помощью следующего SQL-запроса:
9+
```sal
10+
CREATE TABLE IF NOT EXISTS usertable(
11+
YCSB_KEY VARCHAR(64) PRIMARY key
12+
, FIELD0 VARCHAR(100)
13+
, FIELD1 VARCHAR(100)
14+
, FIELD2 VARCHAR(100)
15+
, FIELD3 VARCHAR(100)
16+
, FIELD4 VARCHAR(100)
17+
, FIELD5 VARCHAR(100)
18+
, FIELD6 VARCHAR(100)
19+
, FIELD7 VARCHAR(100)
20+
, FIELD8 VARCHAR(100)
21+
, FIELD9 VARCHAR(100)
22+
) with (distributed_by='ycsb_key', num_parts=$PARTITION_CNT)
23+
```
24+
25+
### Таблица для мониторинга
26+
В таблицу monitoring_insert записывается информация о процессе вставки данных.
27+
Каждые 5 минут в нее добавляются данные о количестве вставленных строк в таблицу usertable:
28+
```
29+
create table monitoring_insert(
30+
ts timestamp,
31+
shard int,
32+
val bigint
33+
);
34+
```
35+
Для достижения высокой скорости загрузки данных используется параллельная вставка:
36+
в каждой ноде Shardman`а запускается отдельный экземпляр приложения, что позволяет эффективно вставлять данные именно в эту ноду не используя [FDW](https://postgrespro.ru/docs/enterprise/15/postgres-fdw).
37+
![example.svg](example.svg)
38+
39+
## Как собрать
40+
```
41+
mvn package
42+
```
43+
Результат сборки в ./target/mbench_fast_load_to_shardman-1.0-SNAPSHOT-jar-with-dependencies.jar
44+
45+
## Как запустить
46+
47+
Параметры, которые нужно задать перед запуском:
48+
49+
Переменные окружения:
50+
51+
- SHARD_CNT - Задаёт количество нод
52+
- PARTITION_CNT - Задаёт общее количество секций для секционированной таблицы
53+
- BENCH_RUN_AFTER - Задаёт начальный id с которого будем генерировать. Если его не указать, то он будет высчитываться из таблицы monitoring_insert как: (select max(val) from monitoring_insert) - 20 000 000
54+
- ROW_LIMIT - Задаёт лимит строк. По умолчанию 800 000 000 000
55+
- В PATH обязательно должен быть путь до psql
56+
57+
Аргументы приложения:
58+
- -U Пользователь, который подключается к СУБД
59+
- -P Пароль, с которым пользователь подключается к СУБД
60+
- -d Имя базы данных
61+
- -h Хост СУБД
62+
- -w Количество параллельных воркеров, на одной ноде
63+
- -v номер ноды: 0 <= v < SHARD_CNT. Важный параметр, поскольку именно с помощью него определяются записи для текущей ноды
64+
- -t Ограничение времени выполнения (в секундах). Генерация остановится, когда будет достигнут лимит времени или ROW_LIMIT.
65+
66+
Пример:
67+
```
68+
export SHARD_CNT=7
69+
export PARTITION_CNT=70
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
71+
```
72+
73+
## Перезапуск
74+
75+
Процесс java можно остановить в любой момент.
76+
77+
Однако, чтобы избежать лишней работы, рекомендуется:
78+
- Дождаться появления новой записи в таблице monitoring_insert
79+
- Сразу после появления записи остановить процесс java
80+
- Запустить генерацию заново по инструкции выше

example.svg

+1
Loading

pom.xml

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<modelVersion>4.0.0</modelVersion>
3+
<groupId>ru.postgrespro.perf</groupId>
4+
<artifactId>mbench_fast_load_to_shardman</artifactId>
5+
<version>1.0-SNAPSHOT</version>
6+
<properties>
7+
<exec.cleanupDaemonThreads>false</exec.cleanupDaemonThreads>
8+
</properties>
9+
<build>
10+
<plugins>
11+
<plugin>
12+
<artifactId>maven-compiler-plugin</artifactId>
13+
<version>3.8.0</version>
14+
<configuration>
15+
<source>1.8</source>
16+
<target>1.8</target>
17+
</configuration>
18+
</plugin>
19+
<plugin>
20+
<groupId>org.apache.maven.plugins</groupId>
21+
<artifactId>maven-jar-plugin</artifactId>
22+
<version>2.4</version>
23+
<configuration>
24+
<archive>
25+
<manifest>
26+
<addClasspath>true</addClasspath>
27+
<mainClass>tests.SelectOnly</mainClass>
28+
</manifest>
29+
</archive>
30+
</configuration>
31+
</plugin>
32+
<plugin>
33+
<artifactId>maven-assembly-plugin</artifactId>
34+
<configuration>
35+
<descriptorRefs>
36+
<descriptorRef>jar-with-dependencies</descriptorRef>
37+
</descriptorRefs>
38+
<archive>
39+
<manifest>
40+
<addClasspath>true</addClasspath>
41+
<mainClass>tests.SelectOnly</mainClass>
42+
</manifest>
43+
</archive>
44+
</configuration>
45+
<executions>
46+
<execution>
47+
<id>make-my-jar-with-dependencies</id>
48+
<phase>package</phase>
49+
<goals>
50+
<goal>single</goal>
51+
</goals>
52+
</execution>
53+
</executions>
54+
</plugin>
55+
</plugins>
56+
</build>
57+
<dependencies>
58+
<dependency>
59+
<groupId>commons-cli</groupId>
60+
<artifactId>commons-cli</artifactId>
61+
<version>1.4</version>
62+
</dependency>
63+
<dependency>
64+
<groupId>org.slf4j</groupId>
65+
<artifactId>slf4j-api</artifactId>
66+
<version>2.0.6</version>
67+
</dependency>
68+
<dependency>
69+
<groupId>ch.qos.logback</groupId>
70+
<artifactId>logback-classic</artifactId>
71+
<version>1.4.5</version>
72+
</dependency>
73+
<dependency>
74+
<groupId>org.postgresql</groupId>
75+
<artifactId>postgresql</artifactId>
76+
<version>42.7.1</version>
77+
</dependency>
78+
<dependency>
79+
<groupId>com.google.guava</groupId>
80+
<artifactId>guava</artifactId>
81+
<version>33.4.0-jre</version>
82+
</dependency>
83+
<dependency>
84+
<groupId>com.zaxxer</groupId>
85+
<artifactId>HikariCP</artifactId>
86+
<version>5.0.1</version>
87+
</dependency>
88+
<dependency>
89+
<groupId>org.hdrhistogram</groupId>
90+
<artifactId>HdrHistogram</artifactId>
91+
<version>2.2.2</version>
92+
</dependency>
93+
</dependencies>
94+
</project>

0 commit comments

Comments
 (0)