sql >> データベース >  >> NoSQL >> MongoDB

トルネードエラー:[Errno24]開いているファイルが多すぎますエラー

    非常に単純で、RequestHandlerオブジェクトはすべてのリクエストに対してインスタンス化されます。これは、保存しているキャッシュオブジェクトがRequestHandler(例:expand)オブジェクト上にあることを意味します。

    単純な「print'CREATED!'」をdbmongo(...)関数に追加すると、すべてのGETリクエストで作成されることがわかります。

    ハンドラーをクラスオブジェクトにアタッチするか、必要に応じて「グローバル」にアタッチする必要がありますが、最良の場合は、ハンドラーをTornadoアプリケーションオブジェクトに配置することです。

    シンプル:

    class setup(tornado.web.RequestHandler):
        @classmethod
        def dbmongo(cls):
            if not hasattr(cls, '_dbmongo'):
                cls._dbmongo = apymongo.Connection("127.0.0.1", 27017)
            return cls._dbmongo
    

    2番目のアプローチは、ファイル内でグローバルにすることです。

    dbmongo_connection = None
    def dbmongo():
        if not dbmongo_connection:
            dbmongo_connection = apymongo.Connection("127.0.0.1", 27017)
        return dbmongo_connection
    

    これらは両方とも同じ問題を抱えています。それは、DB接続を使用したいクラスがたくさんある場合、それを共有するのが難しいということです。 DBは共有エンティティであるため、アプリケーション全体でDBが必要になる可能性があります。

    class MongoMixin(object):
        def mongodb(self):
            if not hasattr(self.application, 'mongodb'):
                self.application.mongodb = apymongo.Connection(self.application.settings.get("mongohost", "127.0.0.1"), 27017)
            return self.application.mongodb
    
    class expand(tornado.web.RequestHandler, MongoMixin):
        def get(self):
           db = self.mongodb()
    



    1. AzureのパフォーマンスベンチマークでのRedis–Redis™とAzureキャッシュのScaleGrid

    2. ノードマングースはループ内のクエリが機能しないことを検出します

    3. mongodbのインデックス付き列で重複をすばやく見つける方法

    4. MongoDB $ toDecimal