这个问题可能与任何基于文档的 NoSQL 数据库有关。
由于可扩展性和无痛管理因素,我正在制作一些特定于兴趣的社交网络并决定使用 DynamoDB。数据库中只有两个主要实体:用户和帖子。
常见查询的要求很简单:
- 家庭动态(我关注的人的动态)
- 我的/用户提要(我的提要,或特定用户提要)
- 我/用户关注的用户列表
- 关注者名单
这是我到目前为止提出的一个数据库方案(图例:__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"
}
如您所见,我想将所有帖子直接存储在时间线集合中。这样我可以使用日期和用户名(哈希和范围键)查询帖子。一切似乎都很好,但问题是:
我无法一口气查询用户时间线。这将是系统最需要的查询之一,我无法提供有效的方法来做到这一点。请帮忙。谢谢。