# dolphindb-test **Repository Path**: shaowewang/dolphindb-test ## Basic Information - **Project Name**: dolphindb-test - **Description**: DolphdinDB Java API 并发写入测试脚本 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-22 - **Last Updated**: 2022-11-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #DolphdinDB Java API 并发写入测试 ## 项目结构 ``` src/main/java 主要测试脚本 src/main/resources/config.txt dolphindb等信息的配置文件,比如 host port ... src/main/resources/init.dos dolphindb 初始化脚本,登陆一个dolphinDB datanode,执行里面的内容,会创建一个database和21张分布式表 src/main/resources/data.xlsx 用于查表随机生成数据的种子数据 src/main/resources/description.pdf 项目背景的简单介绍,包括database的分区方案,分布式表的schema,测试任务描述 ``` ## 下载代码并初始化 - git clone - 执行src/main/resources/init.dos中的脚本,初始化数据库和表 - 修改src/main/resources/config.txt中的数据库连接信息 ## 编译运行 mvn clean package 进入 target/ ,双击start.bat开始调用测试 在终端或者logFile.log里面可以查看并发写入的耗时。 ## java maven 项目说明 默认安装maven jdk 如果没有安装JDK 8,JRE 8也可以,调整 start.bat的29行 java -Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS% jre全路径/java -Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS% ## 表设计辩解 从description.pdf 中可以看出,同类型设备的同名测点一张表。首先在我们行业里面一个设备类型或者一个设备对应一个标准的多值模型是不存在的。 我们相同设备类型应用到不同的细分行业对应的点位都不同。甚至同一个客户的两台膨化机点位定义是大概率不一样的。类似于房车的生产工艺系统,每辆车都有上千种的配置方案,这样的场景跟我们目前布勒的设备比较类似。 所以我们采用了单值模型,每个类型的测点一张表,每行数据里面有设备的ID、时间戳、测点的值。 这样的设计下,网关侧的逻辑就比较简单,单纯地按照测点向平台上报数据。 平台侧批量地消费测点数据,存入时序数据中。虽然每次拿到的测点消息大概率是不同,但是我原来用的是influxdb : influxDbClient.write(batchPoints) 这个batchPoints 可以是不同measurement的Point. 但是对应DolphinDB 来说 批量插入的脚本模板可能是 tableInsert{loadTable('databaseName','tableName')} ,也就是说 API侧只支持单表批量插入。 每每想到这里,开发负责人都会默默跑到厕所,也不脱裤子直接坐在马桶上,点燃一只香烟,就那么烧着,叹息着。 直到烧到烟屁股了,也不见他抽一口。 因为他一直在抽泣着,颤抖着,抹着眼泪和鼻涕。 嘴唇都湿了,生怕抽一口烟就会呛着了。 ## 某次写入测试结果 | 线程数 | 每个线程写入数据数量 | 总数据行数 | 微软云单机版 单Connection 平均耗时 | 微软云单机版 21个Connections 平均耗时 | Dev环境 单Connection 平均耗时 | Dev环境 21个Connections平均耗时 | |--------|---------------------|------------|--------------------------------|---------------------------------|----------------------------|-----------------------------| | 21 | 1 | 21 | 995.82 ms | 315.96 ms | 832.4 ms | 151.46 ms | | 21 | 5 | 105 | 959.04 ms | 301.9 ms | 958.74 ms | 162.56 ms | | 21 | 10 | 210 | 1,092.68 ms | 332.78 ms | 2,611.24 ms | 168.56 ms | | 21 | 20 | 420 | 948.44 ms | 350.14 ms | 2,469.12 ms | 162.34 ms | | 21 | 50 | 1050 | 879.78 ms | 331.1 ms | 1,008.54 ms | 225.16 ms | | 21 | 100 | 2100 | 1,031.08 ms | 317.3 ms | 979.7 ms | 354.12 ms | | 21 | 1000 | 21,000 | 1,528.28 ms | 1,059.02 ms | 3,410.32 ms | 2,869.5 ms |