欢迎参加 第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道 第二赛季(复赛)
请 fork 本项目,并设为 private,然后实现AnalyticDB
接口,并提交自己的代码地址来完成比赛。
请务必阅读完下文的 参赛注意事项。
选手代码运行在容器内,容器 8核8G,每台物理机上同时只会跑一个选手容器,避免互相干扰。 测试数据放在 PMem 上,同时 选手还有一块 PMem 可以用来存储选手生成的数据文件,作为选手的工作空间。
复赛相比初赛会增加持久化和高并发的考察。
- 第一轮启动选手程序,会先调用
load
接口,然后单线程调用10次quantile
接口。此轮20分钟超时。 - 第一轮测试结束后,会退出进程,如果结果正确进入第二轮。
- 第二轮启动选手程序,会先调用
load
接口,然后8线程并行调用quantile
接口,每个线程查询500次。此轮20分钟超时。 - 第一轮与第二轮之间不会清理选手工作空间的文件,选手可重新加载自己的数据。可以通过工作空间是否为空来区别轮次。
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
JVM参数默认如下:
-Xmx4g -Xms4g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
选手可以通过修改项目中的 java_opts.conf
来自定义JVM参数。
自定义参数时请注意:1)不要换行 2)合理分配内存,避免过大而无法启动 3)内存分配应考虑容器 kernel 本身的开销,避免触发 OOM killer
复赛有两张表 lineitem 和 orders,每表均有两列。为减少选手工作量,类型均为bigint和初赛保持一致,每表数据量均为10亿行。 格式如下:
L_ORDERKEY,L_PARTKEY
2876385239627262908,3426163450417145920
5164669269206349835,310661817109752352
4036124977818879891,1783468637370676778
为了避免精度问题导致答案错误,我们会保证所求的百分位的位点恰好是整数。
换句话说,假设有 N 行数据,求百分位 P(0<=P<=1.0),我们保证N * P
是个整数。
具体可以参考SimpleAnalyticDB
实现
- 测试数据随机,均匀分布,极低概率可能会重复,每次测评可能是不同数据集
test_data
目录下提供了一份测试数据和答案,仅供参考
- 任何原因导致测评没有通过,不会消耗提交次数
- 选手总耗时是启动进程到执行结束,所以是包括数据加载和查询到总耗时,按耗时排名
- 选手程序最多运行10分钟
- 取最好的一次提交结果作为选手上榜成绩
- 不能通过 hard code 形式,记录任何测试数据的值在代码中,会视为 hack 代码
- 选手的程序不能只对一份数据能跑,换一份数据不能跑过的程序都视为 hack 代码
- 比赛结束会对前10名选手的代码做重判,确保选手代码可以在多份数据上跑通(只验正确性)。重判使用选手最优提交的代码版本,以及一份新的测试数据。
- 如果选手最优提交的代码版本不存在了,视为无效成绩。
- 只允许使用标准库,不能引入外部依赖,pom文件测评程序编译时会强制覆盖
- 不允许使用 JNI
- 不要修改 maven 的
pom.xml
文件,可能会导致编译失败 - 不要修改
AnalyticDB
接口文件,可能会导致编译失败 - 提交代码前请运行
mvn clean package -DskipTests
,确保能编译通过 - 在
META-INFO/services/com.aliyun.adb.contest.spi.AnalyticDB
中配置你的实现类
- 不要将自己生成的测试数据文件,提交到自己的代码库,可能会因为拉取代码时间过久而超时
- 不要打印过多日志,否则可能因为打过多日志而超时,日志只会截取10M上传
- 添加
analyticdb_support
为你项目的 reporter,确保测评程序有权限拉你的取代码。 - 不要将自己的项目设置为 public 在比赛期间
- 提交代码路径格式,必须是git格式地址,形如:[email protected]:xxx/xxx.git
- 任何恶意或者作弊行为会被永久禁赛