• skiplist.h/filter_policy.h/arena.h/coding.h分析


    一、skiplist.h(跳表)分析

    用户只需要处理写冲突,leveldb跳表保证没有读写冲突。函数功能如下:

    • Insert():
      • FindGreaterOrEqual():保存搜索的路径pre[],找到要插入的节点
        • KeyIsAfterNode():返回值bool,key是否大于n的数据
      • RandomHeight():知道最底层l0要插入数据,那么高层的哪一层也插入这个数据呢?这个层数是随机生成的,代表从0到这个数之间的层都要插入
    • Contains():在 skiplist 中找到节点,如果存在这个节点,且 key 相同,则返回
    • class Iterator{}
      • Seek()
      • Next():移动到下一个节点
      • Prev():
        • FindLessThan():返回小于key的最新节点

    要求不能插入重复数据,关键点在于:每个节点插于时,如何确定新插了节点的层数,以使跳表满足既率均衡进而提供高效的查性能。

    跳表实现专门对多线程做了优化,但仍需外部加锁

    二、filter_policy.h分析

    bloom_filter误判率和:哈希函数个数k、位数组长度m、数据集大小n有关,当k=ln2*(m/n)有最优准确率

    函数的作用:Leveld中的过滤策略、查找对应的keys的Value时,如果事先知道了所有的key里都找不到这个query,就不需要进一步读取磁盘了.

    使用了策略模式,将策略 单独设计为一个类或接口 ,不同的子类对应不同策略。依次计算n个key的K个哈希结果这里使用了Double hash

     三、Arena.h分析

    作用:

    1. 分配指定大小的字节
    2. 按字节对齐的方式分配

    四、coding.h分析

    函数功能:这个类是用来类型转换和压缩空间的

    • EncodeFixed64:将dst转为小端存到buf中

    把int---->varint:是为了尽可能的节约存储空间,最高位是一个标记位

  • 相关阅读:
    maven上传jar包规范
    java.util.ConcurrentModificationException
    求集合中的最大值和最小值
    对象/集合转换成json
    字符串直接赋值和构造赋值的区别
    CSV文件读取
    读取properties配置文件
    图片轮播 js代码
    工作流数据库字段设计-审批流程。。
    @Html.Partials 加载分布视图传参数
  • 原文地址:https://www.cnblogs.com/zyj23/p/15948865.html
Copyright © 2020-2023  润新知