猿教程 Logo

.Net连接MongoDb:阅读首选项

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们首先简要讨论了MongoDb中的一个副本。 复制集是一组MongoDb服务器,其作为单个单元,以提供增加的数据可用性。 有一个主节点和2个或更多个辅助节点。 可以将复制集中的写入关注的“w”部分设置为应该都发送写入/更新操作的确认的节点的数量。 它也可以设置为“多数”,我们想要大多数副本集节点的确认。 我们还可以为“w”指定一个标签值,以便我们等待具有特定标签的服务器来确认该操作。

我们最终也想从我们的数据库中读取。 一个有趣的问题是我们想要从副本集中读取数据。 这是读取偏好进入图片的地方。 还有一个相关术语,称为阅读关注,我们将在一些细节中进行介绍。

阅读偏好

对于具有最终相同数据集的多个数据库实例,我们可以指定要读取哪个节点。 确切地说,我们不提供一个精确的服务器名称或节点的IP地址,而是提供MongoDb在哪里查找数据。

默认情况下,我们的所有读取都被定向到主节点。 这通常是我们想要的,因为我们的所有阅读都将首先进入主节点。 正如我们在上一篇文章中所说,在主节点的数据输入和到次要节点的数据传播之间有一些滞后。 因此,如果要保证搜索操作检索您之前写入数据库的内容,从主节点读取总是最安全的。 这种阅读偏好模式简称为主要模式。

还有其他模式,虽然可以是有趣的。 如果您的目标是在二级节点之间传播读取,并且不关心数据传播滞后,则可以将读取模式设置为辅助节点。 由于数据传播完成后,所有MongoDb服务器的数据都是相同的,所以我们称之为最终一致性。 有时可以偶尔阅读陈旧的数据。 例如。 对博客帖子的评论不需要在主服务器上保存的那一刻出现,等待几秒钟就可以了。 另一方面,您有绝对想要阅读最新的可用数据集的情况,例如 在登录后的用户会话属性的情况下。如果您读取可能导致微妙错误和应用程序不一致行为的陈旧会话数据。

那么主要和次要之间有两种模式:

  • primaryPreferred:我们更喜欢从主节点读取,但也可以从其中一个辅助节点读取

  • secondaryPreferred:这与上述相反,即通常我们想从辅助节点读取,但如果结果来自主要节点,则可以

还有一个称为最近的读取模式。 MongoDb跟踪哪个节点具有最短的延迟,数据将从该节点返回。 我们不知道该节点是主节点还是次节点,所以我们不能保证获得最新的可用数据集。

以下是我们如何在Mongo shell中设置读取首选项:

db.getMongo().setReadPref('primaryPreferred')

阅读关注

读取的关注类似于读取的偏好。 它可以有两个值:“local”,这是默认值,“多数”。 大多数读者关注我们表示,我们只想读取传播到大多数节点的数据。 “本地”选项返回“查询时MongoDB实例可用的最新数据,即使数据尚未持久存储到大多数副本集成员,也可能会回滚”。

阅读关注可以在多个级别上指定,例如。 直接在find命令中:

db.companies.find().readConcern("majority")

除非使用-enableMajorityReadConcern选项启动MongoDb服务器,否则上述将不起作用。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


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