MongoDB的事务,复制与分片

2020-10-17 15:46 CST

2020-10-17 15:46 CST

原文链接:https://mongoing.com/archives/38461

MongoDB副本事务集

  • 副本集的复制基于raft协议,只支持single-master,对应的,MongoDB的副本集是主从架构,而且只有主节点支持写入操作。MongoDB副本集的事务管理,包括冲突检测,事务提交等关键操作,都只在主节点上完成。
  • 使用SI作为事务的隔离急别

SI简介

SI:Snapshot Isolation,即快照隔离,一种MVVC的实现机制

根据快照时间点的选取:

  • CSI(convensional SI)
    • 选取最新的系统快照作为事务的读取快照
    • 一般说一个数据库支持SI隔离级别,其实默认是说CSI
  • GSI(Generalized SI)
    • GSI选择历史上的数据库快照作为事务的读取快照,因此CSI可以看作GSI的一个特例。
    • 对主节点来说每次事务开始选取最新的快照,但是对于其他节点没有统一的最新的概念。
    • 关于时间点的选择,有以下的规则 (其中Ti表示事务i,Xi表示被事务i修改过的X变量)
      • 读规则
        • G1.1,如果变量X被本事务修改了值且读取到了新的值, 那么 读操作一定在写操作后面;
        • G1.2, 如果事务i读取了事务j更新的变量的X, 那么一定不会有事务i更新X的操作,在事务i读取了事务j更新的变量的X这个操作前面;
        • G1.3, 事务j的提交时间早于事务i的快照时间;
        • G1.4, 对于任意一个会更新变量X的事务k, 那么这个事务k一定满足, 要么事务k的提交时间小于事务j, 要么这个事务k的提交时间大于事务i。
      • 写规则
        • G2, 对于任意已经在提交历史里的两个事务,Ci, Cj, 那么一定可以保证当 事务j的commit时间戳在 事务i的观测时间段内时(snapshot(Ti), commit(Ti)), 那么他们更新的变量交集一定为空。
  • PCSI