paldb分析

2018-05-18  本文已影响80人  SeaRise

之前在github上看到一个用java写的nosql,fork下来跟过源码。现在把自己的一些理解记下来。
PalDB,是Linkedin开源的一款只读型的 KV 存储数据库,github地址:https://github.com/SeaRise/PalDB
从github的主页可以看到,PalDB是以低内存使用和高吞吐量为卖点的。主页的介绍是内存使用为hashset的1/6,吞吐量是LevelDB或RocksDB的5倍。

看过源码后可以发现,其设计思路是

下面讲讲我通过源码了解到的PalDB的结构。
PalDB是只读型的数据库,这就意味着使用PalDB你要先进行写阶段,写入所有数据,写阶段结束后只能读数据,不能再写或修改数据。从写读两个阶段来分析

      ------------------
      |meta|keys|values|
      ------------------
             |
    ----------------------------------------------
    |key字节长度1|key字节长度2|.....|key字节长度n|
    ----------------------------------------------
        |
    --------------------
    |开放地址表的哈希表|
    --------------------

meta是一些数据库的控制信息,如key数量之类的。
values是紧密排列的value数据
keys是key的集合。key字节长度为第一级索引。相同字节长度的key组成一个开放地址表哈希表,作为第二级索引。
因为字节长度相等,所以槽的大小固定,分配槽的数量默认为1/0.75倍数量,减小哈希冲突。

        1.key序列化--->
        2.根据字节长度得到该长度key集合的起始地址--->
        3.对key求哈希值得到在key集合内的偏移量--->
        4.一次磁盘操作,拿到key对应的value的offset--->
        5.一次磁盘操作,通过offset拿到value
上一篇 下一篇

猜你喜欢

热点阅读