在客户端/服务器应用程序中启动多少个Mongo实例?

时间:2013-09-12 10:00:35

标签: mongodb glassfish client-server

上下文: 客户端将调用发送到服务器以执行作业。对于每个工作,我创建一个新的MongoClient(使用Morphia):

MongoClient mongoClient = new MongoClient("000.00.000.000", 27017);
Morphia morphia = new Morphia();
Datastore ds = morphia.createDatastore(mongoClient, "myDatastore");
//operations on the datastore: save, find, update...

问题:这是好的做法/完全错误吗?或者我应该只为整个应用程序创建一个MongoClient / Morphia实例作为全局变量,并让每个作业调用它? (as described here

1 个答案:

答案 0 :(得分:1)

doc for the Mongo Java driver说:

  

Java MongoDB驱动程序是线程安全的。如果您在网络中使用   例如,您应该创建一个单独的服务环境   MongoClient实例,您可以在每个请求中使用它。该   MongoClient对象维护一个内部连接池   数据库(默认池大小为10)。对于DB的每个请求(查找,   插入等)Java线程将从池中获取连接,   执行操作,并释放连接。这意味着   每次使用的连接(套接字)可能不同。

所以...每个应用程序一个MongoClient,而不是每个被调用的工作。