必须计算记录数,我应该使用哪个数据库



我正在设计一个系统,该系统具有一个功能,我必须允许用户创建帖子并回复帖子(帖子没有子级(。其中一个要求是显示自用户上次访问以来,每个论坛是否有新帖子。用户将被划分在不同的部门。可能有多个部门,但用户可以在各自的部门中看到。每个部门最多可拥有1000-1500名用户。

理想的用例是计算自上次访问以来的帖子数量,但即使我得到了自上次访问后新帖子的是/否答案,也没关系。

使用和RDS会很完美,因为每个帖子都可以很容易地建立父子关系。但RDS将花费我23美元/月,最低使用量。考虑到这只是一个想法的PoC,我不想每个月花那么多钱。所以我正在寻找替代方案。

另一种方法是DynamoDB。但是DynamoDB并没有提供任何开箱即用的东西(至少我不知道(来计算自给定日期时间以来的行数。我会在给定的时间内阅读所有帖子(假设我将datetime作为排序键,departmentid作为哈希键(,这会占用我的RCU(读取容量单位(。

实现这一要求的最佳优化(成本/运营(方式是什么。

DynamoDB确实不支持开箱即用计数。其中一种选择是预先计算行数,并将其存储在一个单独的实体中,以便快速访问。当创建新帖子时,您还会增加帖子的总数,当用户阅读该帖子时,会增加该用户已经阅读的帖子的数量。您可以使用DDB事务或DDB流和Lambda来简化累积实体的更新。

此解决方案应该有效,但要正确实现可能会很复杂。为了简单起见,我建议先更改计数要求。您可以设置计数标签的阈值,例如100条未读邮件。在这种情况下,标签将显示100+ new messages,而不是显示1521 new messages。这种方法用于我遇到的大多数信使(例如Slack、Discord等(

这种方式允许您最多只读取100条下一条未读消息,并且不会消耗太多的RCU,尤其是如果您的实体很小(通常应该很小(。DDB对查询返回的所有项目的总大小收取费用。因此,您可以检索100行,如果它们的组合大小低于4096字节,则它们仍将花费0.5 RCU。

相关内容

最新更新