我在一个主要显示注册用户创建的项目的网站上工作。所以我说95%的API调用是读取单个项目,5%是存储单个项目。系统采用AWS API Gateway设计,调用AWS Lambda函数来处理DynamoDB中的数据。
我的下一步是实施基本胎儿的投票系统(upvote / downvote):
我的目标是设计数据库/ lambda以最大限度地降低AWS的成本。使逻辑工作变得容易,但我不确定我的解决方案是否是最佳解决方案:
items
表目前有hashkey slug
和sortkey version
items-votes
表,其中包含hashkey slug
和sortkey user
以及voted
字段(包含-1或1)votes
添加到items
表格item-votes
表,但在检查用户尚未投票的约束之前。然后在第二个查询中更新items
表,其中包含更新的投票计数。 (所以1个API调用和2个db查询)votes
计数(1个API调用和1个db查询)我想知道是否可以通过避免新的items-votes
表并在items
表中存储用户投票来做得更好?看起来可以以这种方式保存一个查询,以及lambda执行时间的一半,但我担心它可能会使该表太大/太复杂。每个user
字段都是10个字符的用户ID,因此如果项目获得数千票,我不确定Lambda / DynamoDB与原始解决方案相比的行为方式。
我不希望很快就会有数千张选票,但是对于一些项目并不是不可能发生的事情我想避免在不久的将来需要迁移到不同解决方案的情况