0

私は現在、かなり構造化されていないmongodbデータベースを持っています。Twitterで特定のプロファイルセットのすべてのフォロワーを抽出しようとしています。私のデータベースは次のようになります。

{'123':1
 '123':2
 '123':3
 '567':8
 '567':9
}

ここで、各キーはユーザーであり、値は単一のフォロワーです。これらのキーにインデックスを作成しようとすると、ユーザーが多い(800万人)ため、使用可能なインデックスが不足します。グーグルした後、私が持つことができるインデックスの最大数は約64であることがわかりました。このデータベースに適切なインデックスを作成するにはどうすればよいですか?または、データを保存するための別の方法を提案しますか?

4

1 に答える 1

0

データを別の方法で構造化する必要があります。

すべてのユーザーが配列「フォロワー」を持つ「ユーザー」ドキュメントのコレクションを作成することをお勧めします。この配列には、フォローしているユーザーの一意の識別子 (名前、_id、または自分の ID 番号など) を入力する必要があります。

{ name: "userA",
  followers: [
     "userB",
     "userC"
  ] 
},
{ name: "userB",
  followers: [
     "userD",
     "userF"
 ] 
},

次に、フォロワー フィールドにインデックスを作成して、他のユーザーをフォローしているすべてのユーザーをすばやく見つけることができます。ユーザー「userX」、「userY」、「userZ」をフォローしているすべてのユーザーを検索するには、次のクエリを使用します。

db.users.find({followers: { $all: ["userX", "userY", "userZ" ] } });

編集:

ユーザーにフォロワーを追加するには、$push 演算子を使用します。

db.users.update({name:"userA"}, { $push: { followers: "userB" } } );

$pull 演算子を使用して、配列エントリを削除できます。

db.users.update({name:"userA"}, { $pull: { followers: "userB" } } );
于 2012-09-12T20:22:58.203 に答える