- 数据结构:哈希桶,每个桶内可以装8个数据,然后每一个桶20个相同的桶,在写入的时候,首先通过哈希找到对应的桶,然后在根据当前该哈希值已经有的数量,判断要找存到20个中的哪一个;读的时候,通过哈希算法可以找到对应的桶,但是需要逐个遍历桶中的值找到对应的数据
- 读逻辑:根据主键id可以直接读取,根据唯一索引和普通索引需要先获得主键,然后在通过主键id获得数据
- 一致性验证逻辑:
- 产生原因:在写一条数据的时候,索引写入,但是数据未写入,这时进程被kill,读取时会出现数据不一致情况。
- 方法:在每次写入的时候,会有一个lastetstore的值记录当前写入的标记,进行一致性验证时,会遍历所有索引桶的最后一个索引值,找到其对应的id,然后去源文件中找是否该条数据已经写入,若无则删除。
- 写逻辑:
- 整条数据、唯一索引、普通索引
- 先写入唯一索引和普通索引,最后在根据主键写入整条数据
- 每次写数据的过程中应加锁