18

ドキュメントがグループごとに自然にクラスター化されるアプリケーション(Express + MongoDB + Mongoose)を作成しています。データベースへのすべてのクエリは、単一のグループのドキュメントにアクセスするだけで済みます。ですから、パフォーマンスのために、各グループを独自のコレクションに分けるのは良い考えだと思います。

次に、これらのコレクションのそれぞれに同じスキーマを使用します。これは、これらのコレクションが同じタイプのドキュメントを格納するためです。以前はすべてを単一のコレクションに持っていたため、以前は単一のModelオブジェクトを使用していましたが、現在はグループごとに1つずつ、複数のモデルが必要です。

リクエストごとに(共有スキーマを使用して)新しいModelオブジェクトを作成することをお勧めしますか、それともコストがかかりすぎますか?この場合、適切なアーキテクチャ上の決定は何でしょうか?

私が考えることができる最善のアプローチは、コレクションのリクエストが最初にあったときにモデルを作成し、次にモデルをディクショナリにキャッシュしてすばやくアクセスできるようにすることです。

最善のアプローチは、リクエストごとに新しいModelオブジェクトを作成するコストに依存すると思います。

ありがとう!

4

1 に答える 1

29

モデルはすでにMongooseによってキャッシュされており、複数のモデル/コレクションに同じスキーマオブジェクトを使用できます。したがって、次のようなコードを使用して、モデルのセットを(起動時に)一度作成するだけです。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({...});
var model1 = mongoose.model('model1', schema);
var model2 = mongoose.model('model2', schema);

モデルインスタンスを渡したくない場合はmodel1、ハンドラーmodel2を呼び出して、必要に応じてそれらを検索できます。mongoose.model('model1');

于 2012-11-12T01:31:42.107 に答える