14

この質問は、ドキュメント ベースの NoSQL データベースに関連する可能性があります。

私は関心のある特定のソーシャル ネットワークを作成しており、スケーラビリティと無痛管理の要因により、DynamoDB を使用することにしました。データベースには、 userspostsの 2 つの主要なエンティティしかありません。

一般的なクエリの要件は非常に単純です。

  • ホームフィード (フォローしている人のフィード)
  • マイ/ユーザー フィード (私のフィード、または特定のユーザー フィード)
  • 私/ユーザーがフォローしているユーザーのリスト
  • フォロワー一覧

これは私がこれまでに思いついたデータベーススキームです(凡例:__thisIsHashKeyおよび_thisIsRangeKey):

timeline = { // post 
    __usarname:"totocaster",
    _date:"1245678901345",
    record_type:"collection",
    items: ["2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594"],
    number_of_likes:123,
    description:"Hello, this is cool"
} 

timeline = { // new follower 
    __usarname:"totocaster",
    _date:"1245678901345",
    type:"follow",
    follower:"tamuna123"
}

timeline = { // new like 
    __usarname:"totocaster",
    _date:"1245678901345",
    record_type:"like",
    liker:"tamuna123",
    like_date:"123255634567456"
}

users = {
    __username:"totocaster",
    avatar_url:"2d931510-d99f-494a-8c67-87feb05e1594",
    followers:["don_gio","tamuna123","barbie","mikecsharp","bassman"],
    following:["tamuna123","barbie","mikecsharp"],
    likes:[
    {
        username:'barbie',
        date:"123255634567456"
    },
    {
        username:"mikecsharp",
        date:"123255634567456"
    }],
    full_name:"Toto Tvalavadze",
    password:"Hashed Key",
    email:"totocaster@myemailprovider.com"
}

ご覧のとおり、すべての投稿をタイムライン コレクションに直接保存することにしました。このようにして、日付とユーザー名 (ハッシュ キーと範囲キー) を使用して投稿をクエリできます。すべて問題ないように見えますが、問題は次のとおりです。

User-Timeline を一度に照会することはできません。これは、システムで最も要求の厳しいクエリの 1 つであり、効率的な方法を提供することはできません。助けてください。ありがとう。

4

3 に答える 3

1

Titan グラフ データベース ( http://thinkaurelius.github.com/titan/ ) と Neo4j ( http://www.neo4j.org/ ) を確認します。

Titan は、大規模なデータ セットでかなりうまくスケーリングできると主張しています。

最終的に、あなたのモデルはグラフにうまくマッピングされると思います。ユーザーと投稿はノードになり、エッジを介して任意に接続できます。ユーザー (ノード) は、別のユーザー (ノード) の友人 (エッジ) です。

ユーザー (ノード) は、タイムラインに多数の投稿 (ノード) を持っています。次に、グラフを介して興味深いトラバーサルを実行できます。

于 2013-03-01T06:06:42.950 に答える