我正在运行一个使用Mongodb的基于Flask的Web应用程序(Pymongo用于Python)。几乎每个视图都访问数据库,所以我想最有效地利用内存和CPU资源。我不确定用于实例化pymongo的Connection()对象的最有效方法是什么,该对象用于访问和操作数据库。现在,我在文件顶部声明from pymongo import Connection
,然后在每个视图函数的开头声明:
def sampleViewFunction():
myCollection = Connection()['myDB']['myCollection']
## then use myCollection to manipulation the database
## more code...
我可以做的另一种方式是在我的文件顶部声明:
from pymongo import Connection
myCollection = Connection()['myD']['myCollection']
然后,您的代码只会读取:
def sampleViewFunction():
## no declaration of myCollection since it's a global variable
## then use myCollection to manipulation the database
## more code...
所以唯一的区别是myCollection
的声明范围。这两种方法在处理内存和CPU消耗方面有何不同?由于这是一个Web应用程序,我正在考虑多个用户同时是该站点的场景。我想与数据库连接的生命周期存在差异,我猜这可能会影响性能。
答案 0 :(得分:3)
您应该使用第二种方法。在pymongo中创建连接时,默认情况下会创建连接池。有关详细信息,请参阅文档,请参阅here。这是正确的做事方式。默认的max_pool_size是10,因此这将为您提供10个与mongod实例的连接。如果你以另一种方式完成它并为每个函数调用创建一个池,你将