zoukankan      html  css  js  c++  java
  • levelDB特点

    2017.8.1    数据库
    特点:
    1. key和value都是任意的字节数组,支持内存和持久化存储
        2. 数据都是按照key排序
        3. 用户可以重写排序函数
        4. 包含基本的数据操作接口,Put(key,value),Get(key),Delete(key)
        5. 多操作可以当成一次原子操作
        6. 用户可以通过生成snapshot,使得读取操作不受写操作影响,读取过程中看到最终数据一致性
        7. 支持迭代器对数据的操作
        8. 数据使用snappy自动压缩
    2. leveldb局限性
        1. leveldb非关系型数据库,不支持SQL查询也不支持索引
        2. 锁表范围过,同一时间只支持单进程(支持多线程)访问db
        3. 不支持客户端-服务器模型,用户需要自己封装
    levelDB总体按照LSM 树的算法来存储。不同的是 随着数据的不断写入,磁盘中的树会不断膨胀,为了避免每次参与归并操作的数据量过大,以及优化读操作的考虑,LevelDB将磁盘中的数据又拆分成多层,每一层的数据达到一定容量后会触发向下一层的归并操作,每一层的数据量比其上一层成倍增长。这也就是LevelDB的名称来源。这很好的避免了,从头到尾进行逆运算。
    整体结构:
    • Memtable:内存数据结构,跳表实现,新的数据会首先写入这里;
    • Log文件:写Memtable前会先写Log文件,Log通过append的方式顺序写入。Log的存在使得机器宕机导致的内存数据丢失得以恢复;
    • Immutable Memtable:达到Memtable设置的容量上限后,Memtable会变为Immutable为之后向SST文件的归并做准备,顾名思义,Immutable Mumtable不再接受用户写入,同时会有新的Memtable生成;
    • SST文件:磁盘数据存储文件。分为Level 0到Level N多层,每一层包含多个SST文件;单个SST文件容量随层次增加成倍增长;文件内数据有序;其中Level0的SST文件由Immutable直接Dump产生,其他Level的SST文件由其上一层的文件和本层文件归并产生;SST文件在归并过程中顺序写生成,生成后仅可能在之后的归并中被删除,而不会有任何的修改操作。
    • Manifest文件: Manifest文件中记录SST文件在不同Level的分布,单个SST文件的最大最小key,以及其他一些LevelDB需要的元信息。
    • Current文件: 从上面的介绍可以看出,LevelDB启动时的首要任务就是找到当前的Manifest,而Manifest可能有多个。Current文件简单的记录了当前Manifest的文件名,从而让这个过程变得非常简单。
    其实,写流程很好的按照了记录-归并的过程
    而读操作
    • 用生成的Key,依次尝试从 Memtable,Immtable以及SST文件中读取,直到找到。
    • 从SST文件中查找需要依次尝试在每一层中读取,得益于Manifest中记录的每个文件的key区间,我们可以很方便的知道某个key是否在文件中。Level0的文件由于直接由Immutable Dump 产生,不可避免的会相互重叠,所以需要对每个文件依次查找。对于其他层次,由于归并过程保证了其互相不重叠且有序,二分查找的方式提供了更好的查询效率。
    • 可以看出同一个Key出现在上层的操作会屏蔽下层的。也因此删除Key时只需要在Memtable压入一条标记为删除的条目即可。被其屏蔽的所有条目会在之后的归并过程中清除。
     
     
     
  • 相关阅读:
    new SqlSessionFactoryBuilder().build(inputStream, properties)
    PooledDataSource--mybatis-3-mybatis-3.2.3
    MySQL 日期时间 专题
    使用httpclient抓取时,netstat 发现很多time_wait连接
    ajax提交整个form表单
    jquery 提交数据
    用form表单实现Ajax---post提交
    HTML 5 的data-* 自定义属性
    jquery序列化form表单使用ajax提交后处理返回的json数据
    jquery实现ajax提交form表单的方法总结
  • 原文地址:https://www.cnblogs.com/wanglao/p/11162753.html
Copyright © 2011-2022 走看看