0

私は MongoDB に比較的慣れていませんが、今のところ非常に感銘を受けています。ただし、ドキュメントストアをセットアップする最良の方法に苦労しています。Twitter データを使用して要約分析を実行しようとしていますが、ツイートをユーザー ドキュメントに入れるか、別のコレクションとして保持するかがわかりません。ツイートをユーザー モデル内に配置すると、すぐにサイズの限界に達してしまうようです。その場合、ユーザーのツイートのグループ全体で MapReduce を実行できるようにするための良い方法は何ですか?

漠然としすぎていないことを願っていますが、ドメイン モデルをセットアップする限り、具体的になりすぎたり、間違った道を進みすぎたりしたくありません。

皆さんはもう聞き飽きていると思いますが、私はスキーマを次のようにレイアウトする RDB ランドに慣れています。

| USER |
--------
|ID
|Name
|Etc.

|TWEET__|
---------
|ID
|UserID
|Etc

Mongoの論理スキーマは次のようになります

User
|-Tweet (0..3000)
  |-Entities
    |-Hashtags (0..10+)
    |-urls (0..5)
    |-user_mentions (0..12)
  |-GeoData (0..20)
|-somegroupID

しかし、ユーザー ドキュメントがすぐに容量を超えて肥大化することはありません。しかし、somegroupID が似ているユーザーのツイートを分析したいと考えています。上記のモデル レイアウトは概念的には理にかなっていますが、どの点があまりにも扱いにくいのでしょうか? そして、実行可能な代替手段は何ですか?

4

2 に答える 2

1

MongoHQ.comの優秀な人々の功績です。私の質問はhttps://groups.google.com/d/msg/mongodb-user/OtEOD5Kt4sI/qQg68aJH4VIJで回答されました

クリスウィンスレット@MongoHQ


あなたはこのビデオが面白いと思うでしょう:

http://www.10gen.com/presentations/mongosv-2011/schema-design-at-scale

基本的に、1つのドキュメントに1人のツイートを1日保存します。理由:

  • クエリは通常、日数とユーザーで構成されます

したがって、次のインデックスを作成できます。

{user_id:1、date:1}#日付の範囲と並べ替えを行うため、日付は最後である必要があります

楽しむ!

クリスモンゴ本社


以下を実装するのが最も理にかなっていると思います。

ユーザー

{ user_id: 123123,
  screen_name: 'cledwyn',
  misc_bits: {...},
  groups: [123123_group_tall_people, 123123_group_techies, ],
  groups_in: [123123_group_tall_people]
}

つぶやき

{ tweet_id: 98798798798987987987987,
  user_id: 123123,
  tweet_date: 20120220,
  text: 'MongoDB is pretty sweet',
  misc_bits: {...},
  groups_in: [123123_group_tall_people]
}
于 2012-02-23T17:39:01.020 に答える
1

おそらくここで 16MB の MongoDB ドキュメント制限に遭遇するでしょう。どのような種類の分析を実行したいかを述べているわけではないため、スキーマを推奨することは困難です。MongoDB スキーマは、データ クエリ (および挿入) パターンを念頭に置いて設計されています。

ツイートをユーザーに入れる代わりに、もちろん簡単に反対のことを行うことができます。ユーザー ID とグループ ID をツイート ドキュメント自体に追加します。次に、ユーザーから追加のフィールドが必要な場合は、表示時にいつでも 2 番目のクエリでそれを取得できます。

次のようなツイート ドキュメントのデザインを意味します。

{
    'ハッシュタグ': [ '#foo', '#bar' ],
    'urls': [ "http://url1.example.com", 'http://url2.example.com' ],
    'user_mentions' : [ 'queen_uk' ],
    '地理データ': { ... },
    'userid': 'derickr',
    「somegroupid」: 40
}

ユーザー コレクションの場合、ドキュメントは次のようになります。

{
    'userid' : 'derickr',
    'realname' : デリック・リーザンス',
    ...
}
于 2012-02-17T11:24:53.637 に答える