c# - MongoDB C# 驱动程序 : connection string for sharding over replica set

标签 c# mongodb connection-string replication sharding

我需要按照 MongoDB 引用中的建议在副本集上设置分片以实现高可用性和可伸缩性。在这种情况下,我对 C# 驱动程序的连接字符串及其行为几乎没有疑问(下面的代码片段):

  1. 下面的连接字符串是否适合连接到 mongos 实例:mongos1、mongos2 和 mongos3?

  2. 如果其中一个 mongos 实例崩溃,客户端会发生什么情况?是否会通过重试第二个 mongos 实例来优雅地处理失败的调用?客户端是否将失败的 mongos 实例列入黑名单并稍后重试?

  3. 如果我想设置 readpreference,驱动程序会知道副本集的存在并尊重设置 ReadPreference 吗?

代码片段:

        MongoUrlBuilder bldr = new MongoUrlBuilder();
        List<MongoServerAddress> servers = new List<MongoServerAddress>();
        servers.Add(new MongoServerAddress("mongos1:27016"));
        servers.Add(new MongoServerAddress("mongos2:27016"));
        servers.Add(new MongoServerAddress("mongos3:27016"));

        bldr.Username = "myuser";
        bldr.Password = "mypwd";
        bldr.Servers = servers;
        bldr.DatabaseName = "mydb";

        bldr.ReadPreference = ReadPreference.Primary;

        var server = MongoServer.Create(bldr.ToMongoUrl());

最佳答案

1) 是的,这很好。请注意,所有这些也可以放在实际的连接字符串中。 mongodb://myuser:mypwd@mongos1:27016,mongos2:27016,mongos3:27016/mydb/?readPreference=primary

2) 构建连接字符串的方式将在 3 个 mongos 之间实现负载平衡。如果一个出现故障,那么另外两个将开始接收更多流量。然而,错误会发生,并且不会自动重试。您需要处理错误并根据每次查询/写入做出重试是否安全的决定。

3) 驱动程序在与分片系统对话时,只会将读取首选项转发给 mongos。请注意,mongos 2.2 版在读取首选项方面存在一些困难。我建议您使用 2.4 线路。

关于c# - MongoDB C# 驱动程序 : connection string for sharding over replica set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18922291/

相关文章:

c# - 如何通过 C# 动态选择和连接到 Oracle(Dev Vs Test Vs Production Server)

mongodb - ReplicaSet 上的 RS102 MongoDB

javascript - Meteor js - 无法通过控制台在Mongo上插入数据

mongodb - 插入时在 MongoDB 中自动填充日期

c# - 从 Windows Mobile 打印到蓝牙打印机

.net - 如何从 Entity Framework 获取提供者特定的 ConnectionString

c# - 受信任的 SQL Server 连接

c# - 有没有办法让本地 C++ API 和托管 C++\CLI API 包装它具有相同的 namespace 和类名称

c# - 发送 HTTP header 后,Windows Auth Server 无法设置状态

c# - Aspose pdf417识别