我打算用下面的公式来计算“趋势”的帖子:从用户如何构建DynamoDB数据库以允许查询趋势帖子?
Trending Score = (p - 1)/(t + 2)^1.5
P =票(点)。 t =以小时为单位提交的时间。
我正在寻找关于如何构建数据库表的建议,以便我可以使用DynamoDB(来自Amazon的nosql数据库服务)查询趋势帖子。
DynamoDB需要表中每个项目的主键。主键可以由2部分组成:哈希属性(字符串或数字)和范围属性(字符串或数字)。哈希属性对每个项目必须是唯一的,并且是必需的。范围属性是可选的,但如果使用的话,DynamoDB将在范围属性上构建一个有序的范围索引。
我脑子里想的结构去如下:
表名:用户
HashAttribute: user_id
RangeAttribute: NONE
OtherFields: first_name, last_name
表名:帖子
HashAttribute: post_id
RangeAttribute: NONE
OtherFields: user_id,title, content, points, categories[ ]
表名:分类
HashAttribute: category_name
RangeAttribute: post_id
OtherFields: title, content, points
表名:计数器
HashAttribute: counter_name
RangeAttribute: NONE
OtherFields: counter_value
因此,这里的类型的请求的示例我想使用下面的表设置(例如: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']
查询(3):
插入以下到类别表:
category_name='baseball', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
查询(4):
将以下成类别表:
category_name='soccer', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
的最终目标是能够进行以下类型的查询:
1.查询的趋势职位
2.查询职位在某一类
3.查询与最高点的帖子值
没有任何人有任何想法我怎么能组织我的表这样我可以对趋势帖子进行查询?或者,这是我通过切换到DynamoDB而实现的功能吗?
最好是具体说明您正在使用的数据库。各种“NoSQL”数据库有很大的不同。 – 2012-02-18 05:13:08
你多久会重新计算热门帖子?你在哪里存储上面的时间戳?你愿意在哪个时间段内将帖子老化从而有资格获得趋势? – Nick 2012-02-18 10:44:54
@Layble我打算使用post_id作为增量计数器(所以按降序排序post_id将显示最新的帖子)。我在考虑使用post_id与时间戳的原因是,我可以避免在类别表中重复范围属性的可能性(例如:如果2个不同的用户在同一时间发表关于足球的帖子)。我想我会至少每分钟都要重新计算趋势的帖子。 – 2012-02-18 21:47:22