1

ユーザー設定を設定した mongoDB にコレクションがあります。1 つの特定のコレクションに非常に多くのオブジェクトがあり、ユーザーはコレクション内のキーをたどることができます。例えば:

colletionx { key1: value1, key2: value2 : key3: value3 .. keyn:valuen}

これで、ユーザーは任意の数のキーをたどることができます。(Twitter の「フォロー」機能と非常によく似ています)。

では、これを効率的に行うにはどうすればよいでしょうか。

また、次のようなクエリで mongo にクエリを実行すると、次のようになります。

 db.collection.find({ keyId : 290})

または db.collection.find({ keyId : { $in [ 290] } })、何百万人ものユーザーがいて、全員が 1 つのショーをフォローしている場合、劇的なパフォーマンスの向上はありますか?

4

2 に答える 2

1

データベースに大量のデータがある場合の最大の懸念の 1 つは、クエリを実行しているときにディスクへのアクセスを避けたいということです。Mongodb はデータをメモリに保持するという点でかなり優れていますが、データ セットがメモリを超えて大きくなると、スワッピングが開始され、パフォーマンスが低下します。

クエリを実行しているキーにインデックスがある限り$eq、クエリを実行することとクエリを実行することに大きな違いはないはずです。$inインデックスがない場合は、完全なコレクション スキャンを実行します。

于 2012-05-04T13:53:52.447 に答える
0

大量のデータの場合は、シャーディングを使用することを強くお勧めします 。これにより、データをシャード間で分割できるため、インデックスが RAM メモリに収まる可能性があります。インデックスによるfindOneは非常に効率的だと思います。この場合、パフォーマンスを損なう可能性がある唯一のことは、読み取り操作に加えて大規模な書き込みのみです。モンゴにはグローバルロックがあるので。

于 2012-05-04T21:28:23.423 に答える