我打算使用以下公式计算"趋势"帖子:
Trending Score = (p - 1) / (t + 2)^1.5
Run Code Online (Sandbox Code Playgroud)
p =来自用户的投票(积分).t =自小时提交以来的时间.
我正在寻找有关如何构建数据库表的建议,以便我可以使用DynamoDB(亚马逊的nosql数据库服务)查询趋势帖子.
DynamoDB需要表中每个项目的主键.主键可以由两部分组成:哈希属性(字符串或数字)和范围属性(字符串或数字).哈希属性对于每个项目必须是唯一的,并且是必需的.范围属性是可选的,但如果使用,DynamoDB将在范围属性上构建排序范围索引.
我想到的结构如下:
TableName:用户
HashAttribute: user_id
RangeAttribute: NONE
OtherFields: first_name, last_name
Run Code Online (Sandbox Code Playgroud)
TableName:帖子
HashAttribute: post_id
RangeAttribute: NONE
OtherFields: user_id,title, content, points, categories[ ]
Run Code Online (Sandbox Code Playgroud)
TableName:类别
HashAttribute: category_name
RangeAttribute: post_id
OtherFields: title, content, points
Run Code Online (Sandbox Code Playgroud)
TableName:计数器
HashAttribute: counter_name
RangeAttribute: NONE
OtherFields: counter_value
Run Code Online (Sandbox Code Playgroud)
所以这是我将使用下面的表设置进行的请求类型的示例(例如:user_id = 100):
用户操作1:
用户创建一个新帖子并标记2个类别(棒球,足球)的帖子
查询(1):
检查counter_name ='post_id'的当前值并增加+ 1并使用新的post_id
查询(2):将以下内容插入帖子表中:
post_id=value_from_query_1, user_id=100, title=user_generated, content=user_generated, points=0, categories=['baseball','soccer']
Run Code Online (Sandbox Code Playgroud)
查询(3):
将以下内容插入Categories表:
category_name='baseball', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
Run Code Online (Sandbox Code Playgroud)
查询(4):
将以下内容插入Categories表:
category_name='soccer', post_id=value_from_query_1, …Run Code Online (Sandbox Code Playgroud)