django + PyMongo汇集的最佳实践?

est*_*est 7 django connection-pooling mongodb pymongo

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

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

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

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

jdi*_*jdi 10

连接池如何在PyMongo中工作?

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

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

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

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

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

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

  • 在PyMongo 3中,"auto_start_request"选项消失了. (2认同)