0

すべてのユーザーnameが頻繁に必要だとします。すべてのドキュメントに対してクエリを実行してからこの属性を取得する代わりに、すばやく呼び出すことができるインデックスを保持する最良の方法は何ですか?

これらの属性の単なる配列である別のドキュメントを追加し、ユーザーを追加または削除するたびに手動で編集する必要がありますか? mongo のインデックス作成などを使用するより良い方法はありますか?

ご指導ありがとうございます。

4

2 に答える 2

1

ある種のキャッシュを設定したい場合があります。そのためにredisマシンを使用します。そうすれば、MongoDB に頻繁にアクセスすることを避けることができます。

于 2012-10-28T04:17:33.023 に答える
-1

次のことは必要ありません。

  • クエリの方法を変更する
  • スキーマを変更する

MongoDB やその他のほとんどのデータベースには、インデックスと呼ばれるものがあります。これらにより、データ値に対する O(log n) 操作が可能になり、クエリがはるかに高速になります。それだけでなく、データに対する一種のキャッシュとして設計されており、メモリに常駐できます。

次のようにして、名前のインデックスを単純に暗示することができます。

db.uses.ensureIndex({name:1})

データベースのこちら側をもっと調べることをお勧めします。

これらのリンクから始めてください。インデックスの理論と実装は、すべてのデータベースでほぼ同じです。MongoDB はメモリを使って面白いことをしますが、それ以外は同じです。

編集

私は質問を少し間違って読んだことに気づきました。一度にすべてのユーザー名が必要になるため、すべてのユーザー名のリストを保存します。

大規模なユーザー ベースの場合、Redis がこれを適切に実行できるとは思いません (実際、できないと 90% 確信しています)。控えめに言っても、構造を収容するためのメモリ要件の 1 つです。

なぜそれが必要なのかを真剣に考えることをお勧めします。クエリのシナリオを実際に計画し、要件を検討する必要があります。ここでは奇妙な道を進んでいます。

于 2012-10-28T09:17:14.797 に答える