4

Node.jsのMongoDBデータベースにRESTful(ish)インターフェースを実装しようとしています。ドキュメントによると、基本的なイディオムは次のようなものです。

var mongo = require('mongodb'),
  Server = mongo.Server,
  Db = mongo.Db;

var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('exampleDb', server);

db.open(function(err, db) {
     if(!err) {
        db.collection('test', function(err, collection) {
            // do stuff with collection
        });
     }
});

したがって、基本的なDBアクセスに関係する3つのオブジェクト(サーバー、データベース、およびコレクション)があります。私の質問は、これらのうちどれを起動時にロードしてどこかにキャッシュし、すべてのhttpリクエストで再利用できるか、そしてどれをリクエストごとに再作成する必要があるかということです。私の仮定では、サーバーオブジェクトとデータベースオブジェクトが長持ちすることは問題ありませんが、コレクションオブジェクトについてはよくわかりません。

4

4 に答える 4

1

3つすべて(サーバー接続、データベース、コレクション)を保存し、アプリを起動します。疑わしい場合に備えて、 MongooseのようなMongoDBのODMはそれ自体を実行します。コードを深くネストしないように、非同期を使用することをお勧めします。

個人的には、mongo-liteを使用しています。これによりvar db = require('mongo-lite').connect('mongodb://localhost/exampleDb', ['test']); 、コレクションであるdb.testをいじることができます。これにより、ボイラープレートを大幅に節約できます。

于 2012-09-30T09:06:18.027 に答える
0

なぜそうすべきではないのですか?コレクションオブジェクト自体は多くのメモリを消費せず、mongodbとの対話、クエリ、保存などのすべての機能を提供します。リクエストごとに再作成し、後で削除しても意味がありません。

于 2012-09-29T14:32:03.153 に答える
0

このようなコレクションが多数ある場合は特に、サーバーが動作していない場合は特に、コレクションの寿命が長くなる可能性があります。使用しているのはメモリだけです。

于 2012-09-29T13:19:08.563 に答える
0

通常、openからのコールバックは、残りのアプリケーション/サーバーを起動するためのロジックを開始する必要があります。次に、そのdb参照を保持し、要求ごとにdb.collectionを呼び出します。私は通常、すべてをクリーンに保つために、RESTリソースからdbrefを取得するために呼び出すことができるサービスを持っています。繰り返しますが、これはアプリケーション内のデータベース/コレクションの使用状況によって異なります。

于 2012-09-30T02:07:30.077 に答える