赛题分析
实现一个只支持插入和查找的key-value store。
服务器配置:
- 8核
- 32G DRAM
- 126G PMEM(实际约100G)
- 256G SSD(实际约220G)
测试操作: - 随机写入:50个线程并发随机写入,每个线程使用write各写100万次随机数据
- 随机读取:50个线程并发随机读取,每个线程各使用read读取100万次随机数据,其中查询pk/uk/sk的比例为2:2:1
- 写入总数据量约为12GB
写操作的实现
存储表结构定义
id int64, user_id char(128), name char(128), salary int64
pk : id //主键索引
uk : user_id //唯一索引
sk : salary //普通索引
在写入时除了写入数据还需要写入索引。前面知道存储是明显够用的,100G的PMEM容量明显大于12GB的总写入量,这种情况下哈希表的性能最好。
一个简单的选择是将索引和数据放在一起,key是用来查找的值,value是查找得到的user数据。由于在user_id和salary的索引上也放user数据的话数据将被额外复制两份,浪费存储空间,也会很大程度上减慢写入的速度,因此user_id和salary的索引上存储的是id的值,查找时需要额外查找id的索引得到最终的结果。
大概是这样
经过测试,这样的实现并没有带来很好的性能,原因可能有:
1.