• levelDb笔记


    https://zhuanlan.zhihu.com/p/34665791

    lvlDb:
    1、为了持久化并且使写操作快速返回,先写wal;---内存中不存在脏数据(除了尚未完成写wal的新数据)都是干净数据   ---it:仅带sync的写马上将最新wal下盘
    2、为了读,内存中缓存部分干净数据;
    3、为了大块读写磁盘,磁盘数据是按块组织的;
    4、为了方便下盘,内存缓存也是按块组织的;每满一个块,将其变成不可变块准备下盘;
    5、为了便于查找,每个内存块和每个磁盘块中的数据都组织成有序的;
    6、内存块下盘会与相应磁盘块进行“合并”,更新掉其中的旧数据;
    7、为了节省磁盘空间,磁盘块会进行压缩(读时解压缩);  ---leveldb自己缓存未压缩数据,os的fs自带缓存已压缩的文件中的数据
    8、为了加速多个磁盘文件中的查找,将这些存储磁盘块的文件按照从新到旧顺序组织成level0~levelN,每一层也都是有序的。不同层可以有不同的块大小。每一层太多的时候就向下合并,然后删除自己(即每一层都要不断将部分旧数据下移以保持自己不会太大)。新的层不断生长出来,形成不断垒高的金字塔式的文件结构。
    9、删除可视作一种特殊的写。
    10、内存中只会存在部分新数据,磁盘中可能存在一些旧数据但它们不会被读出而是会逐渐被覆盖或删除掉。

    主要模块:log,memtable, imutable, SST文件,以及管理记录SST文件的manifest文件,以及记录当前manifest文件的current文件。

  • 相关阅读:
    C++继承 派生类中的内存布局(单继承、多继承、虚拟继承)
    Linux 共享库(动态库)
    虚幻4
    从头认识java-16.5 nio的数据转换
    JavaScript实现禁用键盘和鼠标的点击事件
    Codeforces Round #277.5 (Div. 2)部分题解
    iOS-WKWebView使用
    我学cocos2d-x (三) Node:一切可视化对象的祖先
    Android Studio右下角不显示当前branch名称
    Neo4j简单的样例
  • 原文地址:https://www.cnblogs.com/fFaXzz/p/10440521.html
Copyright © 2020-2023  润新知