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);
    
  • 相关阅读:
    Revit API改变风管及管件尺寸
    Revit API注册事件
    Revit API创建标高,单位转换
    Revit API判断直线相交关系移动风管
    Revit MEP API找到连接器连接的连接器
    Revit MEP API连接器类别
    AngularJS如何编译和呈现页面
    AngularJS自定义Directive初体验
    Webpack基本用法
    对一个前端AngularJS,后端OData,ASP.NET Web API案例的理解
  • 原文地址:https://www.cnblogs.com/dengchj/p/11426114.html
Copyright © 2011-2022 走看看