10

db = pymongo.Connection()在 Django 的 views.py 中调用了一个简单的 MongoDB 连接来存储一些简单的统计信息。

使其自动支持 MongoDB 连接池的最佳实践是什么?

我需要把end_request()代码放在哪里?

连接时如何选择max_pool_size参数?

4

1 回答 1

12

PyMongo 中的连接池是如何工作的?

每个 Connection 实例都有内置的连接池。默认情况下,每个线程在第一次操作时都会保留自己的套接字。这些套接字一直保留到该线程调用 end_request() 为止。

调用 end_request() 允许将套接字返回到池中,并由其他线程使用,而不是创建新的套接字。明智地使用此方法对于具有许多线程或长时间运行的线程(很少调用 PyMongo 操作)的应用程序很重要。

或者,使用 auto_start_request=False 创建的连接将在所有线程之间(安全地)共享套接字。

我认为这取决于您拥有的应用程序类型以及请求将保持连接多长时间。调用的想法end_request有助于长时间运行的请求长时间保持套接字并导致创建许多套接字。如果单个请求可以在不再需要连接时释放连接,则套接字可以重新用于其他请求。

如果它们是快速请求,那么我相信auto_start_request=False可以通过重用套接字来实现。

确保连接继续使用相同的套接字意味着它将具有一致的读取。想想如果您进行了查询但它被延迟了,然后立即进行了另一个查询并且它使用了不同的套接字。此套接字设法在前一个套接字之前响应。您将有不一致的数据,因为它不反映以前的写入。

于 2012-07-16T05:59:02.423 回答