我在JSP中使用MongoDB创建了一个Web应用程序,它在多个页面上执行搜索,更新,删除等不同操作。那么我可以为所有页面创建一个MongoClient
实例,还是创建单个实例并在必要时调用它们?哪个在效率和速度方面更有效?
答案 0 :(得分:2)
在http://mongodb.github.io/mongo-java-driver/3.2/driver/getting-started/quick-tour/
的官方文件中据说:
MongoClient实例实际上代表了一个连接池 数据库;你只需要MongoClient类的一个实例 即使有多个线程。
值得注意的是:
通常,您只为给定的内容创建一个MongoClient实例 数据库集群并在整个应用程序中使用它。创建时 多个实例:
所有资源使用限制(最大连接数等)都适用于每个MongoClient实例
要处置实例,请务必调用MongoClient.close()来清理资源
希望,这有帮助!
答案 1 :(得分:1)
MongoClient
是一个连接池对象。您应该只创建一次并在整个应用程序中使用它。
来自API Doc
具有内部连接池的MongoDB客户端。对于大多数应用程序,您应该为整个JVM安装一个MongoClient实例。
如果您需要更改池大小,请使用MongoClientOptions.Builder
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
MongoClientOptions options = builder.connectionsPerHost(30).build();
MongoClient client = new MongoClient(new ServerAddress("localhost"), options);
一般来说,页数与我们创建的连接数无关。
我们的服务器负载决定了我们应该使用多少个连接。在生产环境中,我们总是使用Connection Pool
。连接池是已经实例化的客户端的存储,它管理这些客户端的生命周期(实例化和处理)。使用此池对象获取客户端对象。池的大小取决于服务器上的负载。此处加载表示每单位时间内应用程序在生产环境中进行的数据库调用次数。