0

約250万件のレコードをコレクションしています。現在、mongoose で nodejs を使用しています。現在の検索の効率を改善する提案をお待ちしています。

アーティスト コレクション スキーマは次のようなものです。

var Artist = new mongoose.Schema({
    realname: String,
    names: Array
});

ユーザーが渡す文字列の例:マイケル ジャクソンは警察またはマイケル ジャクソン-ジリー ビーンから連絡を受けました。今、私はアーティスト/歌手/人を見つけなければならないので、私が見つけることができる唯一の論理的なことは次のとおりでした: コレクション内のすべてのドキュメントを繰り返し処理し、名前のいずれかが指定された文字列に含まれているかどうかを確認します。

しかし、nodejsがすべてのレコードを反復してチェックできるように、コレクション全体をメモリにロードする必要があるため、これは非常にメモリ効率が悪いです。

コレクション全体を取得するには、ほとんどの時間がかかるようです。これをスピードアップする方法はありますか?mongoshell db.collection.find() ではかなり高速です。しかし、nodejs で mongoose を使用すると、時間がかかりすぎます。

  • .find() がマングースで使用されるのが非常に遅いのはなぜですか?
  • この目的のために設計された他のデータベースはありますか?
  • この問題をより効率的に解決するにはどうすればよいでしょうか?
  • ここで map reduce を使用できますか?
4

1 に答える 1

1

必要なのは全文検索です。可能なオプション:

  • MongoDBtextインデックスを使用します。(2.4 の新機能)
  • 追加の全文索引を使用します。私の意見では、 elasticsearchは非常にパフォーマンスが高く、初心者にとって理解しやすいものです。
于 2013-05-03T14:56:58.963 に答える