zoukankan      html  css  js  c++  java
  • 副本集的数据复制

      副本集中次要成员同步或者复制来自其他成员的数据,MongoDB使用两种形式的数据同步:

    • 新成员的初始同步
    1. 复制除local库外的所有数据库,对其库进行扫描和复制;
    2. 在3.4版本中会在复制集合文档的时候构建所有集合索引,在旧版本中复制过程只创建_id索引,其他的索引会在复制完成后重建;
    3. 拉取新添加的oplog记录,临时保存这些oplog记录;
    4. 根据原数据库的oplog记录,mongod会变更自身的状态;
    5. 同步完成后,成员状态从StartUp2转换到Secondary。
    6. 同步过程中若同步源上的集合名发生更改,那么目标成员的初始化同步将失败并且重新启动以避免数据损坏。
    • 已有成员之间的持续复制
    1. Secondary成员在初始化同步后不断复制数据,即将oplog从其源同步中复制,并在异步过程中应用这些操作;
    2. Secondary根据ping时间和其他成员复制状态的变化自动选择同步源;
    3. Secondary不会从隐藏节点和延迟节点同步;
    4. 从3.2版本起,具有vote权限的成员不能从不具备vote权限的成员同步;
    5. buildIndexes为true的成员只能从buildIndexes为true的其他成员进行同步,buildIndexes为false的成员可以从任何其他成员同步,buildIndexes默认为false;
    6. 多线程复制:
      • 多线程批量写入,以提高并发性;
      • MMAPv1引擎以namespace(MMAPv1引擎)为groups,WiredTiger引擎以文档ID(WiredTiger引擎)为groups,将写入操作“groups batches“,同时使用不同的线程来应用每组操作;
      • 写入操作以原始写入顺序应用于给定文档中;
      • 在应用批量处理时,MongoDB将阻止所有读取操作。  
  • 相关阅读:
    欧拉函数模板
    Django Views Decorator
    Anaconda3 安装报错 bunzip2: command not found
    Windows 错误 0x80070570
    GitHub报错error: bad signature
    failed to push some refs to 'git@github.com:RocsSun/mytest.git
    更新GitHub的仓库
    Git连接GitHub
    Git的初始化设置
    Git的选项参数
  • 原文地址:https://www.cnblogs.com/bien94/p/12459396.html
Copyright © 2011-2022 走看看