• 羽飞's avatar
    mvcc trx (#156) · 871c9b32
    羽飞 提交于
    ### What problem were solved in this pull request?
    
    Issue Number: close #155 close #135 
    
    Problem:
    实现了简单的事务处理。
    当前支持并发事务数据.
    
    ### What is changed and how it works?
    - 支持两种事务模式:Vacuous和MVCC。
      Vacuous 事务模式算是没有事务,它的事务接口什么都不做。
    MVCC 是多版本并发控制(Multi-Version Concurrency
    Control),使用多个版本保留记录数据。启动miniob时增加运行时选项 -t mvcc可以选择mvcc。
    
    - MVCC:简单模式的多版本并发控制。
      当前miniob仅包含insert和delete操作,因此数据最多包含两个版本,并且不需要在record中保留版本链表信息;
      不支持持久化;
      没有做垃圾回收;
      遗留一个BUG:在提交时没有保证提交的数据一次性对外可见;
      使用简单的写写冲突策略:检测到要修改的数据当前有人在修改,就回退
    
    - 编译MINIOB时使用 -DCONCURRENCY=ON 才会支持并发
    支持各个模块并发处理,包括buffer pool、bplus、record
    manager。如果编译时没有使用CONCURRENCY选项,则保持原样,不支持并发,保持系统的简单性。
    
    - 编译时增加 -DDEBUG=ON 还会增加并发调试日志与严格的运行时检测(ASSERT语句)
    - 当前版本代码中包含了bplus tree和record manager的并发测试,参考benchmark目录下的代码。
    
    ### Other information
    871c9b32
persist_test.cpp 4.2 KB