前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云数据库TDSQL精英挑战赛--决赛Q&A(实时更新)

腾讯云数据库TDSQL精英挑战赛--决赛Q&A(实时更新)

原创
作者头像
腾讯云数据库TDSQL
修改2022-03-25 18:13:50
1.7K0
修改2022-03-25 18:13:50
举报
文章被收录于专栏:腾讯云数据库TDSQL精英挑战赛

各位选手好:

为了大家更好的应对决赛,大赛主办方特此整理一份Q&A(后续会根据赛程中大家所关注的重点问题持续更新),期望对大家有所帮助。

比赛过程中如有疑问,可在腾讯云+社区--Change SQL大赛的讨论区提问,技术团会及时查阅并解答,如涉及题目解析、日志解读等具体细节,技术团不予作答,期望理解。

竞技过程中选手们须遵守比赛规则,对于作弊违规行为,大赛主办方有权启动惩罚机制甚至追责。祝大家取得好成绩,加油!!!

备注:赛程中涉及的最新提问和解答,会持续更新至本文文末,请选手注意查阅。


一、评测规则:

Q:决赛规则里,选手需要特别关注的违规行为?

A:1)禁止在make编译时对源数据进行预处理操作来达到缩短迁移时间的目的;2)比赛中不允许对数据集进行定向优化,即所有关于数据集的信息只能从数据集本身获取,不能硬编码。3)针对选手最终提交的评测程序,大赛技术团会全盘复审,复审后才会生成最终成绩并公示,请大家严格遵守比赛规则。

Q:语言有什么限制?

A:语言涉及go 1.17、java 8 、c、 c++ 11 、python3。(go语言相对初赛版本有变化,请关注)

Q:比赛有性能指标吗?

A:有的,在正确性验证通过的情况下,启动选手迁移程序后,最终统计迁移程序启动到退出所用的时间,按照使用时间从低到高排名(用时越短排名越靠前)。

Q:赛题的答案文件上传有什么要求?

A:选手将源代码及其依赖代码库压缩成zip包提交到评估系统上。

1)参赛选手自己写的代码,必须提交源码。

2)上传代码中如果引用到第三方库(例如java的jar库文件,或者C++的.a文件),需将下载的第三方库文件一起打包到提交的代码里。如果选手对第三方库有改动或重新编译,则需提供源码。注:上述第三方库是指开源的,且可下载、可追溯、可验证的库。

3)上传代码里不允许包含ELF可执行文件。

附:文件压缩样例

1)选中文件压缩

2) 压缩后

3)重新命名tdsql.zip

Q:测试数据集的补充说明。

A:test_data_set.zip文件中包含测试数据集,由三个文件组成:以Binlog结尾的两个文件为MySQL8.0实例的二进制文件,也即是两个源数据的来源;answer.tar.gz压缩文件是校验数据集,形式为MyDumper导出的结果,可以使用MyLoader工具导入数据库。

Q:初赛每次测评是否会提供日志?如果本次测评失败(如编译失败,执行超时,结果错误等原因导致的)是否会扣除测评次数?

A:1)每次提交测评(成功/失败)都有日志,需要选手自行解读,大赛技术团不做日志解读。2)提交测评失败,是会扣除评测次数。另外主办方会给选手发放代金券购买实例,选手也可自行构建测试环境,通过自测的方式做验证。

Q:日志是否有大小限制?超过这个大小程序也会被kill掉?

A:log限制为10kb,超过这个大小你将看不到这个日志,只能看到小于10kb的日志,程序不会被kill掉。

Q:评测多少时间判定为超时?

A:评测时间统一限定为100分钟以内,超过时间则判定为失败,失败原因可查阅日志。

Q:一天可以提交几次评测?排行榜什么时间刷新?

A:每个战队每天可提交5次评测。大赛主办方每天11:00和20:00将对当前已评测出分的成绩进行排行刷新。

Q:主办方会派发代金券用于购买比赛实例,如选手想自行购买更多实例满足自身需求,有什么限制吗?

A:大赛主办方提供的代金券足以保障选手购买指定实例并完成比赛(购买请认真参阅主办方提供的操作指引),如选手仍需购买实例,需自行在【上海五区】购买。

二、Intel/PMem相关:

Q:决赛使用的是Intel的基础硬件,还是迁移过程中要使用Intel的某些功能?

A:程序运行环境在Intel的基础硬件上,选手可以利用硬件的特性提升程序运行的性能。

Q:Intel内存是大赛主办方提供吗?在云主机上?

A:由大赛主办方提供,赛题公布时会配有使用说明和要求。

Q:M6P实例要自己初始化环境吗?

A:选手购买的需要初始化,评估环境的大赛主办方已经初始化好了。

Q:决赛需要哪些依赖库?

A:在初赛的基础上增加安装了pmdk相关依赖,java选手需要随答案一块提交llpl,go选手需要自己参照demo编写映射接口,c/c++,python选手依赖库都已安装好,可直接使用。

Q:测试机器是Intel带NVMe硬件的环境吗?

A:本次赛题使用的机器不涵盖。

Q:决赛要求持久内存当作ssd使用的话,稳定性怎么样?内存不是不稳定存储吗?

A:持久内存的稳定性很好,其存储介质的特性是可持久化的,和DRAM以电容维持刷新所是有本质的区别。并且在持久内存内部还有ECC校验机制。

Q:持久内存和ssd存储有什么区别吗?

A:持久内存的主要特性包括可字节访问,就地写入,其延迟比普通的SSD低很多,这和Nand SSD为代表的块设备是不同的。

Q:libpmemobj不用事务时,性能和libpmem有差异么?

A:libpmem的操作是最底层和粒度最细的,因此效率是最高的。Libpmemobj使用了对象的数据结构,开销要略高于libpmem。

Q:持久内存能不能代替当前所有数据库写wal文件所在的磁盘 ,持久内存的读写速度与磁盘或ssd的性能对比有吗?

A:wal理论上都是可以放在持久内存上,方法可以是直接文件读写和使用mmap的方式读写。在实际应用中需要根据场景来决定,例如:wal在应用中所占的开销。

持久内存的延迟在几百纳秒级,Nand SSD的延迟在几十微秒以上。

Q:Libpmem库部分:map的flag能详细讲一下吗?读写分别需要用什么flag?

A:mmap的函数原型以及flag可以在libpmem的头文件中查看(如下图所示)。

持久内存写数据建议调用libpmem中封装的持久化函数,读数据可以使用memcpy。

Q:libpmem和libpmem2性能上有区别吗?

A:两者的函数封装形式不同,但底层实现是相同的,因此性能上没有区别。

Q: 请问可以使用pmemkv吗?开销和libpmem相比怎么样?

A: pmemkv是一个上层的应用库,其底层实现还是libpmem。因此两者不具备性能对比的意义,根据比赛和应用的需求选择使用。

Q:Java部分,llpl除了heap 也有直接字节读写api。

A:llpl的分配都是通过heap实现,可以按字节读写数据,但数据的组织形式是object。详细说明和步骤可参考此文档:Introduction to LLPL

Q:.pmem和dram 可以字节复制吗

A:PMEM是支持字节访问的设备,因此与DRAM之间可以相互按字节copy数据,需要注意的是从DRAM往PMEM写数据,推荐用PMDK提供的方式。(libpmem/libpmemobj)

Q:pmem当文件系统访问,读写时候不需要4K对齐么?

A:持久内存的特性之一是可字节寻址访问,因此可以更细粒度访问。

Q: 新一代的产品,执行完clwb类似的指令,还会执行sfence保证顺序吗?

A:现有X86指令架构下,CLWB和CLFLUSHOPT指令执行后都必须使用SFENCE。指令详细信息可参见英特尔64和32位软件架构开发人员手册:https://software.intel.com/en-us/articles/intel-sdm

Q:如果包管理器找不到的话,手动编译的时候,还有其他的依赖需要装吗?

A:ndctl和PMDK都是有git地址的,在readme里面都列举了所需要的依赖。较新的包管理器基本都会包括这些依赖。如果包管理器没有,可以手动编译安装。PMDK建议从源码安装较新的版本。以下列出了持久内存相关的常用源码库:

https://pmem.io/ndctl/

https://github.com/pmem/pmdk

https://github.com/memkind/memkind

https://github.com/pmem/llpl


三、实时更新:

3月7日

Q:pmem挂载路径是什么?程序运行目录?

A:pmem挂载路径:/mnt;程序运行目录不用考虑,没在/mnt下。

Q:pmem空间多大?

A: 如你问的是比赛环境中的内存,代码运行CVM机器为[4C16G],采用英特尔® 傲腾™持久内存PMEM的CVM机型,容量为100G。pmem初始化后大小为61G。

Q:kill方式是kill程序还是强制关机?

A:Kill程序,不会强制关机。

Q:决赛的库和表是建好的吗?

A:所有的数据都在Binlog里面。

Q:决赛是不是用不了分片?

A:涉及到题目本身如何来做,需选手自行考虑。

Q: 决赛是把当前两个源的数据合并到TDSQL,合并到当前两个源最新,如果有查询权限的话我可以直接查询数据做合并么?不用Binlog可以吗?

A:提供的账号并没有查询权限,全局权限题目上有说明,包括:RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW, PROCESS)

Q: 题目要求从两个源端MySQL实例获取Binlog,最终将数据写入到目标TDSQL实例中。那源端MySQL的Binlog有什么方式可以获得呢?

A:源数据库账号有对应的权限可以获取到Binlog,具体方式可以查询了解MySQL复制协议相关的资料。

Q:libpmem,libpmemobj 的版本分别是什么?这里只有推荐版本>1.10,安装的是最新版的1.11.1吗? A:libpmem 和libpmemobj都是PMDK下的子库,所以只要安装PMDK就可以,大于等于1.10都是可以的,1.10及以上都是比较新的版本。

Q:评测环境会不会同个时间有多个同学连同个源MySQL的情况?

A:一个源同一时间只有一个同学使用。

Q:怎么测试数据集的source_a.binlog和source_b.binlog文件不是以魔数(fe 62 69 6e)开头的,是不是给错了文件呀?

A:因为使用mysqlbinlog工具导出的。


3月8日

Q:决赛使用的系统还是centos7吗?能考虑用用支持c++17的新版本g++?

A:用的是centos7,编译的时候执行scl enable devtoolset-8 bash ,开启gcc/g++ 8.3.1。

Q:请问评测机会安装mysql-devel吗? A:会的。


3月9日

Q:大赛所需要的资源购买指南。 A:https://doc.weixin.qq.com/doc/w3_AIcAbgbdAFw0d88ZxMFRgiavlw02P


3月11日

Q:评测机支持maven吗?

A:没有安装maven。

Q:Binlog解析是自己写吗?

A:是的。另外关注以下已回答过的问题。

题目要求从两个源端MySQL实例获取Binlog,最终将数据写入到目标TDSQL实例中。源端MySQL的Binlog有什么方式可以获取?

源数据库账号有对应的权限可以获取Binlog,具体方式可查询了解MySQL复制协议相关资料。

Q:比赛环境源端mysql的source_binlog_checksum变量设置的值是NONE还是ALL?

A:设置是云数据库MySQL默认值,评测环境没有特殊设置。

Q:提供的llpl.jar就是这里要求的llpl-1.2.1-release.jar吗?

A:是的。


3月12日

关于赛题中冲突覆盖策略的进一步说明:

1、对于有主键(或者非空唯一键,后面描述中均简化描述为:主键)的表,涉及主键的更新视为两条语句DELETE+INSERT,同时应用之前的规则,DELETE需要被过滤掉;

2、对于无主键的表,可视为包含除updated_at字段外所有其他字段组成的隐式主键,同时应用规则1;

3、对于同一个实例的BINLOG事件,在主键和时间戳相同的情况下,在BINLOG文件中后出现的值应该覆盖前面的值;

4、对于来自不同实例的,主键相同并且时间戳相同的记录,冲突情况下以参数传递的第一个实例为准。

Q:意思是binlog里没有update事件,update由delete+insert代替?

A:以上说明说的比较清楚了,选手再解读下。

Q:主键更新视位delete+insert,delete过滤掉,那主键更新后期望是出现两条数据么?

A:可以理解为update主键需要被当作两个事件,一个delete加一个insert。


3月14日

Q:一个表一开始只有a,b,c,update_at四个字段,但没有主键可以视作有abc三个字段的联合主键来处理冲突,如果在后面通过alter table新增了字段d,是视作有a,b,c,d四个字段的联合主键来处理冲突吗 还是按照原来的三个字段的联合主键来处理冲突?

A:始终以当前表结构来做冲突处理。

Q:源端起始gtid位点信息是以什么形式给出的?评测时程序收到的位点信息是125701e7-93ab-11ec-a718-0c42a1ba752a:1-11116,958da3d3-93ab-11ec-9d0f-bc97e1e97d80:165520-332051,应该解读为,导入server id 为1257... 的第1到11116条binlog,以及server id为968d... 的第165520到332051条binlog吗? A:以评测类似的形式给出,这里提问理解的GTID SET的概念应该不对,可以查阅相关的资料或者做一下测试验证。

Q:线上环境有装mysqlbinlog utility么,可以直接用吗?

A :可以。

Q:较验结果:是检验最终的结果数据是否正确还是检验TDSQL产生的Binlog是否正确? A:结果数据。

Q:Llpl能用1.2.1版本吗?

A:可以的,需要选手侧找资源。


3月19日

Q:线上mysql devel是啥版本?不支持mysql_binlog_fetch?

A:版本是:mariadb-devel-5.5.68-1.el7.x86_64

Q:./run: error while loading shared libraries: libpmem2.so.1: cannot open shared object file: No such file or directory 测评机没有装pmem2的动态库吗?选手在评估环境,自己买的机器安装了PMDK。

A:评估环境已安装,这应该是选手自己环境上运行出的问题,指定下动态库的路径。

Q:一个表一开始只有a,b,c,update_at四个字段,但没有主键可以视作有abc三个字段的联合主键来处理冲突,如果在后面通过alter table新增了字段d,是视作有a,b,c,d四个字段的联合主键来处理冲突吗 还是按照原来的三个字段的联合主键来处理冲突?

A:始终以当前表结构来做冲突处理。

Q:unzip timeout,status: false,解压的超时时间是设置的多长时间?

A: 60s


3月20日

日志已调整为1M。


3月21日

Q:如果表T有唯一索引idxA, idxB,A端有两个数据分别为a1, a2, B端有数据b1, b1在idxA上与a1冲突,在idxB上与a2冲突,而时间戳a1<b1<a2,这时候应该如何处理冲突呢?应该:

1. b1覆盖a1, 新a1被a2覆盖,最终只留下a2

2. a2覆盖b1, 最终留下a1, a2

3. 数据不可能出现这种情况

A:应该不会出现这种情况,最多只有一个唯一索引


3月22日

评测次数调整:

基于给到选手们更多提测机会的考虑,3月22日11:00起,大赛官方评测系统每个战队每天可提交评测次数增至【7次】,每天11点、20点将对当前已评测出分的成绩进行排行刷新。


3月25日

Q:关于以下内容,主键变更后,前后两个数据都要保留?

关于赛题中冲突覆盖策略的进一步说明:

1、对于有主键(或者非空唯一键,后面描述中均简化描述为:主键)的表,涉及主键的更新视为两条语句DELETE+INSERT,同时应用之前的规则,DELETE需要被过滤掉;

2、对于无主键的表,可视为包含除updated_at字段外所有其他字段组成的隐式主键,同时应用规则1;

3、对于同一个实例的BINLOG事件,在主键和时间戳相同的情况下,在BINLOG文件中后出现的值应该覆盖前面的值;

4、对于来自不同实例的,主键相同并且时间戳相同的记录,冲突情况下以参数传递的第一个实例为准。

A:对于有主键表的变更(包括主键、主键的一部分以及除主键意外其他字段的变更),本身是个UPDATE操作,需视作:旧行的删除,以及新行的插入,即DELETE + INSERT操作;

由于按规则:DELETE操作需要被过滤掉,也就是说只剩下新行的插入;

举个例子:一个表,两个字段(id, a),其中id为主键,有一个变更操作UPDATE (1, a) => (2, a)。本身其实是个更新操作,但是我们需把它看作,老行的删除 DELETE (1, a) 和 INSERT (2, a),由于DELETE操作按规则需要被忽略掉,所以这个语句最终应该被当做 INSERT (2, a) 来处理。

忽略DELETE的原因:若有类DELETE操作存在,最终的结果会跟操作的时序有关,会导致不确定性的结果。

这里再说的直白一点:所有update当作insert处理。

Q:评测超时时间不是100分钟吗,看起来提前被结束了?

A:由于改了kill时间从以前10m到现在2m,超时时间应该是92分钟。

Q:官网下载的测试数据中source_a.binlog在创建数据库a之前就使用了use `a`语句,第一次创表语句执行失败,是dump的时候出现问题,还是测试数据本意如此呢?

A:数据本身没有问题,这个跟二进制日志的记录有关,建议在本地测试验证一下在不同情况下会出现什么情况。

Q:假设表A有2列,第一列是主键,有一行记录(1,'a'),如果有一条update更新(1,'a')到(2,'a'), 因为被当成先delete后insert,然后忽略delete,那么原先update后表A应该是(2,'a')共1行记录, 现在变为(1,'a'),(2,'a') 两行记录,是这意思嘛? A:你的问题主要应用1的规则,不过还要看主键是什么,如果你主键是1,你说的没问题,如果主键是 a,你说的就不对了。 Q:请问提供源码是指以动态库/静态库文件+源码文件夹的形式上传吗? A:如果有改动第三方库需要提供源码,没有改动直接用动态库/静态库就行。另外有改动需要在测评环境编译出动态库/静态库再使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 备注:赛程中涉及的最新提问和解答,会持续更新至本文文末,请选手注意查阅。
  • 一、评测规则:
  • 二、Intel/PMem相关:
  • 三、实时更新:
  • 3月7日
  • 3月8日
  • 3月9日
  • 3月11日
  • 3月12日
  • 3月14日
  • 3月19日
  • 3月20日
  • 3月21日
  • 3月22日
  • 3月25日
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档