Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何使用C#驱动程序安全高效地连接到MongoDB replicaset实例_Performance_Mongodb_Mongodb .net Driver - Fatal编程技术网

Performance 如何使用C#驱动程序安全高效地连接到MongoDB replicaset实例

Performance 如何使用C#驱动程序安全高效地连接到MongoDB replicaset实例,performance,mongodb,mongodb-.net-driver,Performance,Mongodb,Mongodb .net Driver,我正在将MongoDB与C#驱动程序一起使用,我想知道创建到数据库的连接的最有效但最安全的方法是什么 线程安全 根据Mongo DB C#驱动程序文档。这是否意味着我可以拥有MongoClient或MongoDatabase的单例实例 文档中还指出,MongoDB的连接管理是从MongoClient类中抽象出来的 示例场景 假设我的复制集中有三个MongoDB实例;因此,我基于这些实例的三个服务器地址创建了MongoClient和MongoDatabase对象。我可以为数据库和客户端对象创建一个

我正在将MongoDB与C#驱动程序一起使用,我想知道创建到数据库的连接的最有效但最安全的方法是什么

线程安全 根据Mongo DB C#驱动程序文档。这是否意味着我可以拥有
MongoClient
MongoDatabase
的单例实例

文档中还指出,MongoDB的连接管理是从
MongoClient
类中抽象出来的

示例场景
假设我的复制集中有三个MongoDB实例;因此,我基于这些实例的三个服务器地址创建了
MongoClient
MongoDatabase
对象。我可以为数据库和客户端对象创建一个静态单例,并在多个请求中同时使用它们吗?如果其中一个实例死亡怎么办;如果缓存Mongo对象,如何确保安全处理此场景?

在我的项目中,我只使用单例MongoClient,然后从MongoClient获取MongoServer和其他内容。
这是因为正如您所说,连接池位于MongoClient中,我绝对不想要多个连接池。下面是报告的内容:

连接到副本集时,仍将仅使用一个副本集 MongoClient的实例,它表示整个副本集。 驱动程序会自动查找副本集的所有成员,并 标识当前主目录

实际上,MongoClient从1.7开始就添加到C#driver中,以表示整个副本集,并处理故障切换、负载平衡等问题。因为MongoServer没有能力做到这一点。因此,您不应该缓存MongoServer,因为一旦服务器脱机,您就无法知道它

编辑:刚刚看了一下源代码。我可能弄错了。MongoClient不处理连接池。MongoServer确实如此(至少在驱动程序1.7之前,还没有查看最新的驱动程序源代码)。这是有意义的,因为MongoServer代表一个真实的Mongo实例。一个连接池只存储到该服务器的连接