gpt4 book ai didi

nosql - 如何构建 DynamoDB 数据库以允许查询热门帖子?

转载 作者:行者123 更新时间:2023-12-04 16:00:36 24 4
gpt4 key购买 nike

我打算使用以下公式来计算“趋势”帖子:

Trending Score = (p - 1) / (t + 2)^1.5

p = 来自用户的投票(点数)。
t = 自提交以来的时间(以小时为单位)。

我正在寻找有关如何构建数据库表的建议,以便我可以使用 DynamoDB(来自 Amazon 的 nosql 数据库服务)查询热门帖子。

DynamoDB 需要为表中的每个项目设置一个主键。主键可以由两部分组成:哈希属性(字符串或数字)和范围属性(字符串或数字)。每个项目的哈希属性必须是唯一的,并且是必需的。 Range 属性是可选的,但如果使用,DynamoDB 将在 Range 属性上构建一个排序的范围索引。

我想到的结构如下:

表名:用户
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' 和 increment+1 的当前值并使用新的 post_id

查询 (2):将以下内容插入 Posts 表:
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 的能力?

最佳答案

我首先用时间戳与 post_id 对您的评论进行注释。
由于您将使用 DynamoDB 作为 post_id 生成器,因此存在可扩展性问题。
这些数字本质上是不可缩放的,最好使用日期对象。
如果您需要以疯狂的速度创建帖子,您可以开始阅读 Twitter 是如何做的
http://blog.twitter.com/2010/announcing-snowflake

现在让我们回到您的趋势检查:
我相信您的情况是滥用 DynamoDB。
假设您有一个热门类别,其中包含最多的帖子。
基本上,您必须扫描整个帖子(因为数据没有很好地传播),并且每次开始时都要查看要点并在您的服务器中进行比较。这将不起作用或将非常昂贵,因为每次您可能会使用所有保留的读取单元容量。

用于此类趋势检查的 DynamoDB 方法是使用 MapReduce
在这里阅读如何实现这些:http://aws.typepad.com/aws/2012/01/aws-howto-using-amazon-elastic-mapreduce-with-dynamodb.html

我无法指定时间,但我相信您会发现这种方法具有可扩展性——尽管您将无法经常使用它。

另一个注意事项 - 您可以保留“前 10/100”流行问题的列表
并且在帖子被点赞时“实时”更新它们 - 你得到列表,检查它是否需要使用新点赞的问题进行更新,并在需要时将其保存回数据库。

关于nosql - 如何构建 DynamoDB 数据库以允许查询热门帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com