この質問は、ドキュメント ベースの NoSQL データベースに関連する可能性があります。
私は関心のある特定のソーシャル ネットワークを作成しており、スケーラビリティと無痛管理の要因により、DynamoDB を使用することにしました。データベースには、 usersとpostsの 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 つであり、効率的な方法を提供することはできません。助けてください。ありがとう。