Skip to content

Commit da025cc

Browse files
author
turlybekovol
committed
Workload TPC-C init
1 parent bfdb873 commit da025cc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2135
-1
lines changed

ydb/library/workload/CMakeLists.darwin-x86_64.txt

+24
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,40 @@
66
# original buildsystem will not be accepted.
77

88

9+
get_built_tool_path(
10+
TOOL_enum_parser_bin
11+
TOOL_enum_parser_dependency
12+
tools/enum_parser/enum_parser
13+
enum_parser
14+
)
915

1016
add_library(ydb-library-workload)
1117
target_link_libraries(ydb-library-workload PUBLIC
1218
contrib-libs-cxxsupp
1319
yutil
20+
tools-enum_parser-enum_serialization_runtime
1421
api-protos
1522
cpp-client-ydb_table
1623
)
1724
target_sources(ydb-library-workload PRIVATE
1825
${CMAKE_SOURCE_DIR}/ydb/library/workload/stock_workload.cpp
1926
${CMAKE_SOURCE_DIR}/ydb/library/workload/kv_workload.cpp
2027
${CMAKE_SOURCE_DIR}/ydb/library/workload/workload_factory.cpp
28+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_workload.cpp
29+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/customer.cpp
30+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/district.cpp
31+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/history.cpp
32+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/item.cpp
33+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/new_order.cpp
34+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/oorder.cpp
35+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/order_line.cpp
36+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/query_generator.cpp
37+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/stock.cpp
38+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/warehouse.cpp
39+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/load_thread_pool.cpp
40+
)
41+
generate_enum_serilization(ydb-library-workload
42+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_config.h
43+
INCLUDE_HEADERS
44+
ydb/library/workload/tpcc/tpcc_config.h
2145
)

ydb/library/workload/CMakeLists.linux-aarch64.txt

+24
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,41 @@
66
# original buildsystem will not be accepted.
77

88

9+
get_built_tool_path(
10+
TOOL_enum_parser_bin
11+
TOOL_enum_parser_dependency
12+
tools/enum_parser/enum_parser
13+
enum_parser
14+
)
915

1016
add_library(ydb-library-workload)
1117
target_link_libraries(ydb-library-workload PUBLIC
1218
contrib-libs-linux-headers
1319
contrib-libs-cxxsupp
1420
yutil
21+
tools-enum_parser-enum_serialization_runtime
1522
api-protos
1623
cpp-client-ydb_table
1724
)
1825
target_sources(ydb-library-workload PRIVATE
1926
${CMAKE_SOURCE_DIR}/ydb/library/workload/stock_workload.cpp
2027
${CMAKE_SOURCE_DIR}/ydb/library/workload/kv_workload.cpp
2128
${CMAKE_SOURCE_DIR}/ydb/library/workload/workload_factory.cpp
29+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_workload.cpp
30+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/customer.cpp
31+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/district.cpp
32+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/history.cpp
33+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/item.cpp
34+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/new_order.cpp
35+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/oorder.cpp
36+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/order_line.cpp
37+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/query_generator.cpp
38+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/stock.cpp
39+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/warehouse.cpp
40+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/load_thread_pool.cpp
41+
)
42+
generate_enum_serilization(ydb-library-workload
43+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_config.h
44+
INCLUDE_HEADERS
45+
ydb/library/workload/tpcc/tpcc_config.h
2246
)

ydb/library/workload/CMakeLists.linux-x86_64.txt

+24
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,41 @@
66
# original buildsystem will not be accepted.
77

88

9+
get_built_tool_path(
10+
TOOL_enum_parser_bin
11+
TOOL_enum_parser_dependency
12+
tools/enum_parser/enum_parser
13+
enum_parser
14+
)
915

1016
add_library(ydb-library-workload)
1117
target_link_libraries(ydb-library-workload PUBLIC
1218
contrib-libs-linux-headers
1319
contrib-libs-cxxsupp
1420
yutil
21+
tools-enum_parser-enum_serialization_runtime
1522
api-protos
1623
cpp-client-ydb_table
1724
)
1825
target_sources(ydb-library-workload PRIVATE
1926
${CMAKE_SOURCE_DIR}/ydb/library/workload/stock_workload.cpp
2027
${CMAKE_SOURCE_DIR}/ydb/library/workload/kv_workload.cpp
2128
${CMAKE_SOURCE_DIR}/ydb/library/workload/workload_factory.cpp
29+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_workload.cpp
30+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/customer.cpp
31+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/district.cpp
32+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/history.cpp
33+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/item.cpp
34+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/new_order.cpp
35+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/oorder.cpp
36+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/order_line.cpp
37+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/query_generator.cpp
38+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/stock.cpp
39+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/warehouse.cpp
40+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/load_thread_pool.cpp
41+
)
42+
generate_enum_serilization(ydb-library-workload
43+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_config.h
44+
INCLUDE_HEADERS
45+
ydb/library/workload/tpcc/tpcc_config.h
2246
)

ydb/library/workload/CMakeLists.windows-x86_64.txt

+24
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,40 @@
66
# original buildsystem will not be accepted.
77

88

9+
get_built_tool_path(
10+
TOOL_enum_parser_bin
11+
TOOL_enum_parser_dependency
12+
tools/enum_parser/enum_parser
13+
enum_parser
14+
)
915

1016
add_library(ydb-library-workload)
1117
target_link_libraries(ydb-library-workload PUBLIC
1218
contrib-libs-cxxsupp
1319
yutil
20+
tools-enum_parser-enum_serialization_runtime
1421
api-protos
1522
cpp-client-ydb_table
1623
)
1724
target_sources(ydb-library-workload PRIVATE
1825
${CMAKE_SOURCE_DIR}/ydb/library/workload/stock_workload.cpp
1926
${CMAKE_SOURCE_DIR}/ydb/library/workload/kv_workload.cpp
2027
${CMAKE_SOURCE_DIR}/ydb/library/workload/workload_factory.cpp
28+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_workload.cpp
29+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/customer.cpp
30+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/district.cpp
31+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/history.cpp
32+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/item.cpp
33+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/new_order.cpp
34+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/oorder.cpp
35+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/order_line.cpp
36+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/query_generator.cpp
37+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/stock.cpp
38+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/warehouse.cpp
39+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/load_data/load_thread_pool.cpp
40+
)
41+
generate_enum_serilization(ydb-library-workload
42+
${CMAKE_SOURCE_DIR}/ydb/library/workload/tpcc/tpcc_config.h
43+
INCLUDE_HEADERS
44+
ydb/library/workload/tpcc/tpcc_config.h
2145
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
#include "customer.h"
2+
3+
#include <util/string/printf.h>
4+
5+
#include <sstream>
6+
7+
namespace NYdbWorkload {
8+
namespace NTPCC {
9+
10+
TCustomerLoadQueryGenerator::TCustomerLoadQueryGenerator(TTPCCWorkloadParams& params, ui32 partNum, ui64 seed)
11+
: TLoadQueryGenerator(params, seed)
12+
, PartNum(partNum)
13+
{
14+
WarehouseId = (partNum - 1) * params.Warehouses / params.Threads + 1;
15+
DistrictId = 1;
16+
CustomerId = 1;
17+
}
18+
19+
bool TCustomerLoadQueryGenerator::Finished() {
20+
i32 whEnd = PartNum * Params.Warehouses / Params.Threads;
21+
return (WarehouseId > whEnd);
22+
}
23+
24+
TString TCustomerLoadQueryGenerator::GetCreateDDL(TString path, ui32 partNum, TString partAtKeys) {
25+
std::string partNumS = std::to_string(partNum);
26+
TString query = Sprintf(R"(
27+
CREATE TABLE `%s/customer` (
28+
C_W_ID Int32 NOT NULL,
29+
C_D_ID Int32 NOT NULL,
30+
C_ID Int32 NOT NULL,
31+
C_DISCOUNT Double,
32+
C_CREDIT Utf8,
33+
C_LAST Utf8,
34+
C_FIRST Utf8,
35+
C_CREDIT_LIM Double,
36+
C_BALANCE Double,
37+
C_YTD_PAYMENT Double,
38+
C_PAYMENT_CNT Int32,
39+
C_DELIVERY_CNT Int32,
40+
C_STREET_1 Utf8,
41+
C_STREET_2 Utf8,
42+
C_CITY Utf8,
43+
C_STATE Utf8,
44+
C_ZIP Utf8,
45+
C_PHONE Utf8,
46+
C_SINCE Timestamp,
47+
C_MIDDLE Utf8,
48+
C_DATA Utf8,
49+
PRIMARY KEY (C_W_ID, C_D_ID, C_ID)
50+
) WITH (
51+
AUTO_PARTITIONING_BY_LOAD = DISABLED,
52+
AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = %s,
53+
AUTO_PARTITIONING_MAX_PARTITIONS_COUNT = %s,
54+
PARTITION_AT_KEYS = (%s)
55+
);
56+
)", path.c_str(), partNumS.c_str(), partNumS.c_str(), partAtKeys.c_str());
57+
58+
return query;
59+
}
60+
61+
std::string TCustomerLoadQueryGenerator::GetCleanDDL() {
62+
std::string cleanQuery = "DROP TABLE `customer`;";
63+
64+
return cleanQuery;
65+
}
66+
67+
NYdb::TValue TCustomerLoadQueryGenerator::GetNextBatchLoadDDL() {
68+
NYdb::TValueBuilder rows;
69+
if (Finished()) {
70+
return rows.Build();
71+
}
72+
73+
rows.BeginList();
74+
for (i32 id = 1; id <= Params.LoadBatchSize; ++id) {
75+
rows.AddListItem().BeginStruct();
76+
rows.AddMember("C_W_ID").Int32(WarehouseId);
77+
rows.AddMember("C_D_ID").Int32(DistrictId);
78+
rows.AddMember("C_ID").Int32(CustomerId);
79+
rows.AddMember("C_DISCOUNT").Double(static_cast<double>(UniformRandom32(1, 5000, Rng)) / 10000.0);
80+
if (UniformRandom32(1, 100, Rng) <= 10) {
81+
rows.AddMember("C_CREDIT").Utf8("BC");
82+
} else {
83+
rows.AddMember("C_CREDIT").Utf8("GC");
84+
}
85+
if (CustomerId <= 1000) {
86+
rows.AddMember("C_LAST").Utf8(GetLastName(CustomerId - 1));
87+
} else {
88+
rows.AddMember("C_LAST").Utf8(GetNonUniformRandomLastNameForLoad(Rng));
89+
}
90+
rows.AddMember("C_FIRST").Utf8(RandomString(UniformRandom32(8, 16, Rng)));
91+
rows.AddMember("C_CREDIT_LIM").Double(50000.0);
92+
rows.AddMember("C_BALANCE").Double(-10.0);
93+
rows.AddMember("C_YTD_PAYMENT").Double(10.0);
94+
rows.AddMember("C_PAYMENT_CNT").Int32(1);
95+
rows.AddMember("C_DELIVERY_CNT").Int32(0);
96+
rows.AddMember("C_STREET_1").Utf8(RandomString(UniformRandom32(10, 20, Rng)));
97+
rows.AddMember("C_STREET_2").Utf8(RandomString(UniformRandom32(10, 20, Rng)));
98+
rows.AddMember("C_CITY").Utf8(RandomString(UniformRandom32(10, 20, Rng)));
99+
rows.AddMember("C_STATE").Utf8(RandomString(2));
100+
rows.AddMember("C_ZIP").Utf8(RandomNumberString(4) + "11111");
101+
rows.AddMember("C_PHONE").Utf8(RandomNumberString(16));
102+
rows.AddMember("C_SINCE").Timestamp(Now());
103+
rows.AddMember("C_MIDDLE").Utf8("OE");
104+
rows.AddMember("C_DATA").Utf8(RandomString(UniformRandom32(300, 500, Rng)));
105+
rows.EndStruct();
106+
107+
CustomerId++;
108+
if (CustomerId > ETPCCWorkloadConstants::TPCC_CUST_PER_DIST) {
109+
CustomerId = 1;
110+
DistrictId++;
111+
if (DistrictId > ETPCCWorkloadConstants::TPCC_DIST_PER_WH) {
112+
DistrictId = 1;
113+
WarehouseId++;
114+
if (Finished()) {
115+
break;
116+
}
117+
}
118+
}
119+
}
120+
rows.EndList();
121+
122+
return rows.Build();
123+
}
124+
125+
}
126+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#pragma once
2+
3+
#include "query_generator.h"
4+
5+
6+
namespace NYdbWorkload {
7+
namespace NTPCC {
8+
9+
class TCustomerLoadQueryGenerator : public TLoadQueryGenerator {
10+
public:
11+
12+
TCustomerLoadQueryGenerator(TTPCCWorkloadParams& params, ui32 partNum, ui64 seed);
13+
14+
static TString GetCreateDDL(TString path, ui32 partNum, TString partAtKeys);
15+
16+
static std::string GetCleanDDL();
17+
18+
NYdb::TValue GetNextBatchLoadDDL() override;
19+
20+
bool Finished() override;
21+
22+
private:
23+
ui32 PartNum;
24+
i32 WarehouseId;
25+
i32 DistrictId;
26+
i32 CustomerId;
27+
};
28+
29+
}
30+
}

0 commit comments

Comments
 (0)