Caching MongoDB connections in Django

∥☆過路亽.° 提交于 2020-01-22 19:44:10

问题


I'm using the standard (as opposed to NonRel) version of Django connected to PostgreSQL on top of Apache + mod_wsgi. This setup also connects to MongoDB (some data is saved externally). Right now I have to create a new MongoDB connection for each Django request, and pass it along throughout the call stack to all functions that require access to MongoDB. Is there a way to cache connections between requests?

Edit

At the risk of blasphemy, would a global variable work in this case?


回答1:


There are several ways explaining how pymongo can work (or fail) with mod_wsgi, suggested here: http://api.mongodb.org/python/current/faq.html?highlight=wsgi#does-pymongo-work-with-mod-wsgi

In addition you can use some kind of pooling solution, like described here: http://www.mongodb.org/display/DOCS/Notes+on+Pooling+for+Mongo+Drivers

One project that I know already to have pooling is MongoEngine, its a very simple ORM that uses pymongo behind the scenes. You might want to look into it together with the pymongo faq solutions above.




回答2:


You can instantiate MongoDB connection somewhere and import it as opposed to calling pymongo.connection.Connection() every time you need it. Or you can create a Singleton to do this. Something like this in settings.py.

class ConnectionSingleton(object):
    """Represents a MongoDB connection"""
    conn=None
    def __new__(cls,*args,**kwds):
        if cls.conn is None:
            cls.conn=pymongo.connection.Connection()
        return cls.conn

Wouldn't this solve your problem?



来源:https://stackoverflow.com/questions/10992718/caching-mongodb-connections-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!