2

我正在运行一个基于 Flask 的 Web 应用程序,该应用程序使用 Mongodb(与 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 应用程序,我正在考虑多个用户同时是站点的场景。我想与数据库的连接的生命周期有所不同,我猜这可能会影响性能。

4

1 回答 1

3

您应该使用第二种方法。在 pymongo 中创建连接时,默认情况下会创建一个连接池。有关更多详细信息,请参见文档,请参见此处。这是做事的正确方法。默认的 max_pool_size 为 10,因此这将为您提供 10 个与 mongod 实例的连接。如果您以另一种方式进行操作并为每个函数调用创建一个池,您将

  1. 创建和破坏与每个函数调用的连接,这会浪费资源 - RAM 和 CPU。
  2. 无法控制您的代码将创建多少连接到 mongod - 您可以用连接淹没 mongod
于 2012-08-27T12:57:17.150 回答