Doris性能测试

1.测试目标

Doirs官方提供了使用JDBC插入数据的性能测试结果,该测试使用了TPC-H的LINEITEM表作为数据集,使用DataX的txtfilereader读取文本类型的数据集并通过mysqlwriter将数据集写入Doris。以下将实现此测试过程,实际检验Doris在服务器上的插入性能。整理内容包括使用TPC-H工具生成测试所需数据集的方法,DataX的配置及使用方法,最终完成测试。

Doris官方提供的性能测试结果

名词解释

  1. tpch:TPC的全称是Transaction Processing Performance Council,即事务处理性能委员会。是一个非盈利性组织,致力于开发以数据为中心的基准程序标准规范,并向行业提供客观、可验证的数据,用以评估和比较不同系统的性能。TPC制定了多种基准测试标准,TPC-E是其中的一种,它的数据库设计由8张表组成。

  2. sf10:sf是Scale Factor的简写,默认为1。其作用以LINEITEM表的行数举例来说,待生成数据集的目标行数等于SF*6,000,000,sf10则代表将生成6000万行数据。此参数也可理解为生成指定数量GB的数据集,sf10则代表TPC-H的8张数据表,它们待生成的数据集文件总占用磁盘空间为10GB。sf后跟的数值官方文档上是有要求的(如下截图),但实测不按其要求单独使用LINEITEM表也可正常生成数据。

  3. lineitem:TPC-H测试共提供了8张数据表,LINEITEM表是其中一张,共有16个字段,后面会有建表语句。

  4. 20 files:TPC-H工具生成的单表数据集是可以拆分的,通过TPC-H生成了20个拆分好的LINEITEM数据集。用于DataX并发读取。

  5. 14G:总数据集的磁盘占用数,当sf指定为1时,实测LINEITEM约占空间700多M,14G是sf20生成的数据集大小。

  6. 120 million rows:当sf指定为1时,LINEITEM约有600万行,1.2亿行是sf20生成的数据集大约行数。

  7. DataX:是阿里云DataWorks数据集成的开源版本,实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。

2.使用TPC-H工具准备数据集

2.1.下载

访问地址:https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp

选择TPC-H对应的Source Code进行下载,当前下载的版本是V3.0.1。

下载的压缩包解压后,可在解压根目录中找到说明书"specification.pdf"文件。

2.2.安装

进入解压根目录后执行如下操作

# TPC-H默认的数据库选项中没有MySQL,需进行补充
$ vi dbgen/tpcd.h
# 加入如下内容

#ifdef MYSQL
#define GEN_QUERY_PLAN  ""
#define START_TRAN      "START TRANSACTION"
#define END_TRAN        "COMMIT"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "limit %d;\n"
#define SET_DBASE       "use %s;\n"
#endif

# 将makefile.suite复制为makefile
$ cp dbgen/makefile.suite dbgen/makefile

# 修改makefile文件
$ vi dbgen/makefile
# 修改如下配置项

################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC      = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS,
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are:  TPCH
DATABASE= MYSQL
MACHINE = LINUX
WORKLOAD = TPCH

# 进入dbgen目录
$ cd dbgen

# 编译,执行编译前需安装gcc
$ make

2.3.数据集生成

2.3.1.简单数据集生成示例

# 数据集生成示例,执行以下命令将生成1G的数据集
$ ./dbgen -vf -s 1
# 清空已生成过的数据集文件
$ rm -f *.tbl*
# 查询生成的数据集文件
$ du -sh *.tbl*

执行完后输出情况如下,可见共输出8张数据表的数据,共1G

查询.tbl数据集文件可知,它实际上是文本文件,一行代表一条记录内容,各字段值使用"|"隔开。

2.3.2.指定表数据集生成示例

# 只生成lineitem表的数据集示例
$ ./dbgen -vf -T L -s 1

执行完后输出情况如下

2.3.3.数据集拆分生成示例

# 拆分输出数据集为多部分,用来Doris的并发插入测试。
# -v:启用详细模式的输出信息
# -f:覆盖已存在文件
# -T:仅输出指定表,L代表LINEITEM表
# -s:即Scale Factor (SF)
# -C:将输出数据集拆分成n部分,n为后面跟着的数字值
# -S:当数据集进行拆分输出时,当前输出哪一个部分
# 以下命令的执行结果是指定生成LINEITEM表6000000*20行的数据集,拆分20个部分,当前生成第一部分
# 执行后生成了700多MB的lineitem.tbl.1文件,若将-S的参数值改为2则将生成lineitem.tbl.2文件,直至依次改成20,完成20个数据集文件的准备
$ ./dbgen -vf -T L -s 20 -C 20 -S 1

# 创建data-set目录,用于存放所有生成的数据集
$ mkdir data-set
# 将所有生成的数据集文件移入data-set目录
$ mv *.tbl* ./data-set

2.3.4.Doris创建LINEITEM数据表

在解压根目录下的dbgen目录中包含如下两个数据库相关信息文件,分别是:

  • dss.ddl:包括创建表的相关语句信息
  • dss.ri:包括创建主键、外键索引相关语句信息

根据上面的数据库表结构信息,整理Doris建表语句如下:

CREATE TABLE LINEITEM 
(
    L_ORDERKEY    INT NOT NULL,
    L_LINENUMBER  INT NOT NULL,
    L_PARTKEY     INT NOT NULL,
    L_SUPPKEY     INT NOT NULL,
    L_QUANTITY    DECIMAL(15,2) NOT NULL,
    L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,
    L_DISCOUNT    DECIMAL(15,2) NOT NULL,
    L_TAX         DECIMAL(15,2) NOT NULL,
    L_RETURNFLAG  CHAR(1) NOT NULL,
    L_LINESTATUS  CHAR(1) NOT NULL,
    L_SHIPDATE    DATETIME NOT NULL,
    L_COMMITDATE  DATETIME NOT NULL,
    L_RECEIPTDATE DATETIME NOT NULL,
    L_SHIPINSTRUCT CHAR(25) NOT NULL,
    L_SHIPMODE     CHAR(10) NOT NULL,
    L_COMMENT      VARCHAR(44) NOT NULL
)
UNIQUE KEY(L_ORDERKEY,L_LINENUMBER)
DISTRIBUTED BY HASH(L_ORDERKEY) BUCKETS 1
PROPERTIES ('replication_num' = '1');

使用上述语句在Doris创建表后完成数据集所有准备工作。

3.DataX配置与使用

3.1.程序包下载及准备

# 下载DataX
# 官方地址:https://github.com/alibaba/DataX/blob/master/userGuid.md
$ wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz

# 解压缩
$ tar -zxvf datax.tar.gz

# 进入datax目录
$ cd datax

# 执行自检脚本
$ python bin/datax.py job/job.json

3.2.数据同步任务配置文件编辑

# 创建数据同步任务配置文件
$ touch job/textToMysqlJob.json

数据同步任务配置文件

注意

  • txtfilereader的path及mysqlwriter的数据库连接地址、用户、密码需要根据实际进行配置。
  • txtfilereader中支持的数据类型仅包括STRING, LONG, BOOLEAN, DOUBLE, DATE。
  • txtfilereader中的column的index指.tbl数据集文件每行使用"|"分隔符的第几部分,从0开始。要与mysqlwriter的column数组中的字段名对应起来。
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "txtfilereader",
                    "parameter": {
                        "path": ["/解压根路径/dbgen/data-set"],
                        "encoding": "UTF-8",
                        "column": [
                            {
                                "index": 0,
                                "type": "long"
                            },
                            {
                                "index": 1,
                                "type": "long"
                            },
                            {
                                "index": 2,
                                "type": "long"
                            },
                            {
                                "index": 3,
                                "type": "long"
                            },
                            {
                                "index": 4,
                                "type": "double"
                            },
                            {
                                "index": 5,
                                "type": "double"
                            },
                            {
                                "index": 6,
                                "type": "double"
                            },
                            {
                                "index": 7,
                                "type": "double"
                            },
                            {
                                "index": 8,
                                "type": "string"
                            },
                            {
                                "index": 9,
                                "type": "string"
                            },
                            {
                                "index": 10,
                                "type": "date",
                                "format": "yyyy-MM-dd"
                            },
                            {
                                "index": 11,
                                "type": "date",
                                "format": "yyyy-MM-dd"
                            },
                            {
                                "index": 12,
                                "type": "date",
                                "format": "yyyy-MM-dd"
                            },
                            {
                                "index": 13,
                                "type": "string"
                            },
                            {
                                "index": 14,
                                "type": "string"
                            },
                            {
                                "index": 15,
                                "type": "string"
                            }

                        ],
                        "fieldDelimiter": "|"
                    }
                },
                "writer":  {
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "用户名",
                        "password": "密码",
                        "column": ["L_ORDERKEY", "L_PARTKEY", "L_SUPPKEY", "L_LINENUMBER", "L_QUANTITY", "L_EXTENDEDPRICE", "L_DISCOUNT", "L_TAX", "L_RETURNFLAG", "L_LINESTATUS", "L_SHIPDATE", "L_COMMITDATE", "L_RECEIPTDATE", "L_SHIPINSTRUCT", "L_SHIPMODE", "L_COMMENT"],
                        "connection": [{
                            "jdbcUrl": "jdbc:mysql://serverAddress/dbName?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true&sessionVariables=group_commit=async_mode",
                            "table": ["LINEITEM"]
                        }],
                        "batchSize": 100,
                        "preSql": [""],
                        "session": []
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 20
            }
        }
    }
}

3.3.执行数据同步(性能测试)

$ python bin/datax.py job/textToMysqlJob.json
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值