- 论坛徽章:
- 9
|
本帖最后由 wlmqgzm 于 2016-07-17 14:45 编辑
继续开发代码, 现在准备解决的主要的问题是:
1)计划重新写 Key Map 这部分代码, 准备先简化, 主字段 整体所有的字节都放到内存中, 包括主字段Key, hash id, Global Offset, 占用空间为主字段Key的长度+16字节, 减少程序间的耦合, 后期再考虑优化空间.
初期这部分代码主要的思路是: 初期的设计考虑用尽可能少的内存来实现最大化的记录数的地址索引, 因此, 架构中 主字段( key) 先hash转化为一个64bit的长整数, 然后再映射到File_maping中, 以一个64bit的offset来表示实际存储的位置.
将所有的数据分解为两大类, 有hash冲突的, 无哈希冲突的,然后分别处理,
无哈希冲突的, 2个64比特就足够表示, 考虑hash冲突有可能对于多数记录都不存在, 因此多数记录都不需要保存主字段, 只占用16个字节就可以完整表示一个记录的位置, 占用内存空间比较少, 32G内存就肯定可以处理20亿的记录,
出现hash冲突后, 读取冲突的旧数据, 重新写入另外的数据结构中, 这部分数据结构中主要是 包含了主字段
总之, 就是代码复杂, 并且与下层的File_mapping的存储结构耦合. 要额外增加一些只读IO.
2) MVCC的处理: 要简化掉,
初期的设计中, 考虑到MVCC的并发情况, 因此, 对于每个数据记录都要有多个版本的记录, 并且正在更新的原始记录中还要有连接号, 那么SELECT查询就很复杂, 这部分代码对多版本的处理部分, 目前看做的比较复杂, 从已经写的代码看, 比预想的要复杂的多, TODO:的内容也比较多, 这部分代码准备要大块的暂时取消掉, 隐藏掉.
|
|