MongoDB中的复制类型





您好,Khabrovites!我们已经为您解码了Evgeny Aristov的MongoDB教程的一部分,该教程已有20岁,是在线课程“非关系数据库”的作者和作者与课程本身一样,该材料对于遇到NoSQL并希望学习如何优化数据库并与之合作的专家也很有用。



为什么要复制?



  1. 高可用性。备份是好的,但是部署需要时间。
  2. 水平缩放。如果服务器的物理核心和内存不足。
  3. 最好从副本而不是从主数据库进行备份。
  4. 加载地理位置分布。


在MongoDB中,开箱即用的复制类型不多:目前最相关的是Replicaset,第二种是Master-slave,仅限于3.6版,本文将不对其进行详细讨论。



#1。从主服务器写入和读取



我们有一个读取和写入主要节点的客户端应用程序驱动程序。此外,根据复制协议,写入主节点的信息将发送到辅助节点。







#2。从提示中阅读



从主服务器读取和写入的另一种方法是驱动程序可以从辅助服务器读取信息。在这种情况下,设置可以不同,例如,“最好先从次要节点读取信息,然后再从主节点读取信息”或“从网络图上最近的节点读取信息”等。这种配置选项的使用要比第一个复制选项使用的多,第一个复制选项使所有配置都通过主复制。







使副本可读的3种方法:



  • 指定 db.slaveOk()
  • 在驱动程序连接字符串中指定所需的参数
  • 指定所有内容,然后在查询本身中进行更精确的编写,例如,从南部区域的Secondary中读取: db.collection.find({}).readPref( “secondary”, [ { “region”: “South”} ] )


副本读取问题



  1. 由于录制是异步的,因此可以在主要数据库上进行录制,但无法到达辅助数据库,因此将从辅助数据库读取旧数据。
  2. , , .

    , . MongoDB , , , .
  3. , () — «».




A)节点彼此“监听”,此连接称为心跳。也就是说,每个节点都不断地被其​​他节点检查为“有生命/无生命”的主题,以便在发生某些情况时采取某些措施。







B)一个辅助节点更改为仲裁器。这是一个非常轻量级的应用程序,像Mongo一样运行,实际上不消耗资源,并且负责确定在投票时将哪个节点识别为主要节点。这通常是推荐的配置。







此配置的主要功能



  • 异步复制
  • 仲裁器没有数据,因此非常轻巧
  • 小学可以成为中学,反之亦然。仲裁人不能成为主要仲裁人或次要仲裁人
  • 最多可以回复50条,只有7条可以投票
  • Arbiter Primary Secondary, , .. , Arbiter .


如果您想了解有关MongoDB集群功能的更多信息,可以在此处观看整个演示课程的录像。在本课中,Evgeny Aristov演示了Replicaset和主从之间的区别,解释了仲裁过程,缩放,分片以及正确选择分片键的方法。



探索MongoDB的功能是非关系数据库在线课程的一部分。本课程适用于NoSQL的开发人员,管理员和其他专业人员。在课堂上,实践中的学生掌握了当今最相关的工具:Cassandra,MongoDB,Redis,ClickHouse,Tarantool,Kafka,Neo4j和RabbitMQ。



比赛已经在9月30日开始,但是在第一个月您可以加入小组。学习程序,经历入学考试并加入!



All Articles