- 2023 OceanBase 数据库大赛初赛已正式开启!!!同时报名截止到10月25日,同学们抓紧报名啦~
初赛时间:10月17日-11月6日
初赛提测链接
2023-miniob:OceanBase 社区
2023-oceanbase-附加赛题:OceanBase 社区
初赛代码Github:GitHub - oceanbase/miniob: MiniOB is a compact database that assists developers in understanding the fundamental workings of a database.
初赛成绩将在英雄榜实时更新,请大家及时关注榜单新动态:OceanBase 社区
本次大赛答疑均在钉钉群进行,微信群仅作为重要通知提醒。请各位参赛同学尽快加入大赛钉钉答疑群(群号:35326455)
团队每位同学都能提测,每支队伍每日提测上限次数是10次,请同学们注意提测次数。
大赛报名:OceanBase 社区
1、 今年的比赛只支持 GitHub 吗?
推荐使用GitHub。
2、 请问是每天每道题十次提测机会,还是每天所有题加起来只有十次机会? 去年的赛题还能提测么,提测去年的题目会不会浪费次数?
每个团队每天只有十次提测机会,团队内部注意协调好提测。可以提测,不会占用次数。
3、 之前说用miniob_test,但是现在又多了一个oceanbase-competition-2023,所以我们应该用哪个分支开发?
miniob_test 和 oceanbase-competition-2023 分支没有差别,两个都可以使用。最开始使用的是miniob_test,后来为了让大家更容易找到需要的分支,使用了更容易明白的“oceanbase-competition-2023”。给大家造成的误解道歉。
4、 请问test分支,和2023分支用那个都可以嘛?不同分支对以后的解题有影响嘛?
没影响,现在几个分支代码都差不多。
5、不知道如何提交代码?
可以参考MiniOB文档:https://oceanbase.github.io/miniob/
6、public repo not allowed,clone repo failed
2023年开始,比赛中不允许使用 public 仓库,即公共仓库提交测试,必须改为私有(private仓库)。大家可以参考 MiniOB GitHub 在训练营中的使用说明12。
7、题目描述与实际提测情况不符
比如update-select题目中,update val=(select xxxx) where id=1; 如果子查询返回的值个数超过1个通常我们都要返回失败,但是在MySQL中,由于where id=1返回的数据量是0,所以此语句返回成功,但是不实际更新数据。
总结:以实际MySQL表现为准。
8、浮点数处理异常
由于MySQL中对float字段的精度处理非常差,会遇到a < a的情况,比如 insert into t values(29.14);但是select * from t where id < 29.14;可以得到29.14这个数据。
另外还有比较长的浮点数,比如10356.23,在MySQL中会保存为10356.2,无法与miniob的要求保持一致,而且比较难找到一种规则。
如果同学们遇到上面的情况,可以在群内与我们沟通,来调整case,避免这种情况的发生。
9、failed to receive response from observer. reason=Failed to receive from server. poll return POLLHUP=16 or POLLERR=str(event & select.POLLERR), sql=
没有收到服务端的回复。测试程序会使用poll来探测服务端发来的消息,这里在探测时返回了异常,说明服务端通讯出现了异常。
10、训练营的提示信息是什么意思?
训练营测试时,会向服务端发起SQL 请求,同时期望收到回复。每个SQL都会有期望的正确回复,与实际上收到的选手提测代码的回复。如果两者不一致,就认为case不通过,同时以"- " 前缀表示我们期望收到的正确答案,而 "+ " 表示收到的选手提测答案。
11、SQL DEBUG无法使用
经过测试,SQL DEBUG有BUG,需要同学们拉取patch到自己的代码:
https://github.com/oceanbase/miniob/pull/298
后续提交测试就可以看到了。
直接在Linux上下载patch文件的方法:
wget https://github.com/oceanbase/miniob/pull/298.patch
12、编译执行到一半卡住不动了
看起来是并发编译消耗的资源太多,把build.sh中-j参数删除,重新编译即可。
13、GitHub 二次认证无法选择中国电话号码
https://blog.csdn.net/weixin_44367884/article/details/105273108
16、客户端只能接受不超过4096字符的输入
在系统上安装readline开发包,然后重新编译。
在ubuntu上,是安装 libreadline-dev ,其它系统需要安装对应的包,即readline的开发包。
17、failed to run cmake
提测后训练营提示标题中的信息。
出现这个问题通常是由于你自己的代码仓库不完整或者格式与oceanbase/miniob 不一致导致的。
测试平台在拉取你的代码后,会执行 cmake 命令,这里提示 cmake 命令执行失败。
你可以拉取oceanbase/miniob 代码,push 到你自己的仓库,然后再测试。可以参考这篇文档。
最后注意,在代码仓库处理完成后,重新提测时,清理掉提测中的 “分支”和"commit id"信息,这时测试平台会拉取你代码仓库中默认分支的最新代码。
18、build.sh: line 2: $’\r’: command not found
在执行build.sh脚本时,遇到下面的错误
通常是使用Windows电脑下载源码,然后在docker或虚拟机中运行build.sh脚本运行时出现这个错误。
解决方法:
执行下面的脚本,设置git不要切换换行符。
git config --global core.autocrlf false
然后删除源码重新下载(clone)。
问题原因:
在Windows上git clone源码后,文本文件(包括build.sh)换行符被修改为 ‘\r\n’(CRLF),这个换行符在Linux上不能识别,Linux的换行符是’\n’(LF)。
19、关于类型转换
虽然题目中没有明确要求支持类型转换,但是类型转换的运算是隐式的,对于类型转换的规则可以参考MySQL的文档。同学们可以在优先支持字符串与数字的算术运算、比较运算之后,如果遇到相关问题再实现。
大赛钉钉官方交流群(群号:35326455)