猿教程 Logo

.Net连接MongoDb:副本集中的写入关注

介绍

在上一篇文章中,我们介绍了MongoDb中写入问题的主题。 写意见由两部分组成。 成分“w”表示“写”,我们可以设置确认级别。 默认值为1,这意味着我们等待确认写操作被持久化到内存。 0表示开机忘记,即我们将写入操作发送到MongoDb,我们不想等待任何类型的确认。 写作关注的另一个因素是代表日记的“j”。 该日志是一个日志,其中MongoDb注册对集合及其文档的所有更改。 我们可以等待期刊被坚持到磁盘或者不用担心。

在这篇文章中,我们将讨论一些关于复制集的内容,以及在这种情况下写入关注的意思。

复制集

MongoDb中的一个副本集是一组MongoDb数据库,表现为一个单元。 数据库通常位于不同的服务器上。 复制集的目标是如果一个服务器(一个节点)下降,其余的仍然可以处理应用程序的数据库需求。 因此,像我们对由多个Web服务器托管的Web应用程序类似的情况。 每个Web服务器将具有相同的Web应用程序,以便最终用户获取相同的内容,而不管哪个服务器获取负载均衡器的请求。

复制集不是关于负载平衡。 这真的是提高数据可用性。 如果现实生活中的高流量网站在其后端基础设施中只有一个数据库节点,那么这个非常容易受到攻击的网站是非常脆弱的。 如果您的后端存储区是MongoDb,那么复制集是增加稳定性的好选择。

副本集由3个或更多服务器组成。 有一个称为主服务器的“老板”,其他是次要的。 所有写入操作都针对主服务器,然后负责将数据异步复制到辅助服务器。 因此,每个数据库最终将在其自己的集合副本中具有相同的数据集。 复制延迟通常很短,这是几毫秒的问题。

如果原始号码是3 - 一个主要号码和两个二次号码,那么一个副本组可以由两台服务器组成,然后其中一个下载。 如果主服务器关闭,剩下的节点就会选择一个新的服务器。

在复制集中写下问题

所有这一切都对写入关注有影响。 我们在上一篇文章中设置为1,这是默认值。 然而,该整数具有非常具体的含义。 1表示我们要等待1台服务器的确认。 在单一服务器环境中,只有值0和1有意义。 在复制集中,我们可以将该数字增加到任何节点总数。 例如。 如果w = 2,那么我们等待主服务器和一个辅助服务器确认写入。 我们仍然可以在一个副本集中将w设置为1,这意味着我们只等待主服务器提供和确认。

所有这一切还有一个成分:写入超时值,缩写为wtimeout:

db.companies.insert({"name" : "Samsung", "phone" : 5345346}, {"writeConcern" : {"w" : 3, "j" : false, "wtimeout" : 10000}})

wtimeout设置为我们愿意等待辅助节点提供其确认的最大时间(以毫秒为单位)。

在上述示例中将j设置为true意味着我们等待日志被保存在主节点上的磁盘上。 没有任何设置可以指定我们要等待日志在辅助节点上持久化。

w参数可以具有特殊值“多数”。 这意味着要从复制集中的大多数节点获得确认。 那将是3的3,3的5等等。 另外可以将w设置为标签值。 副本集中的节点可以具有特殊标签,如“重要”或“关键”或任何字符串。 如果将w设置为一个标签,那么我们将等待具有此标签值的节点的确认。 你可以在这里阅读更多。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/41.html