zoukankan      html  css  js  c++  java
  • RocksDB 之Write Ahead Log(WAL)

    Overview

    RocksDB 中有三个基本的数据结构概念:memtable, sstfile 和 logfile

    • memtable 是个内存数据结构,新写入会插入memtable 切回选择性地写入logfile。
    • logfile 是一个顺序写入磁盘的文件。
    • 当memtable 写满后,会flush 至盘上的sstfile,告知logfile 可以被安全地删除了。 为了让查找keys 有更好的性能,sstfile 中的数据已排序。

    对RocksDB 的每次写操作都必写到两个地方:
    1)基于内存的数据结构memtable(达到quota 后会flush 至SST file)。
    2)预写日志-Write Ahead Log(WAL)。
    如果出现异常情况,WAL 可以用来完整恢复memtable 中的数据,恢复db 的原有的状态。默认配置下,RocksDB 通过每次用户写之后flush WAL,来保证进程crash 后的一致性。

    WAL 的生命周期

    举例说明:RocksDB 实例db 由两个 Column Families: "new_cf"、"default" 创建,Column Families 在RocksDB 3.0 时创建,每个key-value pair 至少对应一个Column Families,未指定则对应"default"。Column Families 提供了一种逻辑分隔db 的途径。
    当db open 后,就会创建一个新的WAL 用户持久化所有的写入。

    DB* db;
    std::vector<ColumnFamilyDescriptor> column_families;
    column_families.push_back(ColumnFamilyDescriptor(
         kDefaultColumnFamilyName, ColumnFamilyOptions()));
    column_families.push_back(ColumnFamilyDescriptor(
         "new_cf", ColumnFamilyOptions()));
    std::vector<ColumnFamilyHandle*> handles;
    s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db);
    
  • 相关阅读:
    【LeetCode】N数和
    用PHP写一个双向队列
    PHP的几种遍历方法
    thinkphp中dump()方法
    【转】PHP对象在内存中的分配
    【转】PHP的执行原理/执行流程
    从头到尾彻底解析哈希表算法
    【转】TCP通信的三次握手和四次撒手的详细流程(顿悟)
    springmvc中拦截器的定义和配置
    springmvc中的异常处理方法
  • 原文地址:https://www.cnblogs.com/dengchj/p/11426114.html
Copyright © 2011-2022 走看看