django + PyMongo汇集的最佳实践?

时间:2012-07-16 05:51:41

标签: django mongodb connection-pooling pymongo

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

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

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

如何在连接期间选择max_pool_size参数?

1 个答案:

答案 0 :(得分:8)

How does connection pooling work in PyMongo?

  

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

     

调用end_request()允许将套接字返回到池中,   并由其他线程使用,而不是创建一个新的套接字。   明智地使用这种方法对于许多应用程序非常重要   线程或长时间运行的线程,几乎不会调用PyMongo   操作

     

或者,使用auto_start_request = False创建的Connection将会   在所有线程中共享套接字(安全)。

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

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

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