大赛名称:第四届全球数据库大赛—PolarDB性能挑战赛 赛道名称:分布式NewSQL性能挑战(PolarDB-X) 初赛代码
初赛部分,50个线程写入,50个线程读取,每个线程写入100W条数据,总数据量不超过13G。性能测试时分为数据写入阶段,重启之后进入数据读取阶段。因此写入时不考虑构建索引以加快写入速度,当第一个读取发生时,同步其他线程,将索引构建出来。
考虑到pmem写入时写入256字节可以打满写入带宽,同时对于同一段256字节,没有多线程同时访问修改时效果最好,因此考虑每个写线程各自一个数据桶,每个线程写入自己的数据桶。由于每条数据272字节,因此先将数据写入mmap中,当数据达到256字节的整数倍时,将数据从内存中刷入持久化内存中。
索引使用hashmap,根据数据的碰撞性,哈希函数自己设计。进行无锁处理,当读取的过程中发生了写时,同步所有读线程,防止数据竞争。