投票项目 - 如何设计数据库/ aws-lambda以最大限度地降低AWS成本

时间:2017-02-22 11:33:01

标签: amazon-dynamodb aws-lambda

我在一个主要显示注册用户创建的项目的网站上工作。所以我说95%的API调用是读取单个项目,5%是存储单个项目。系统采用AWS API Gateway设计,调用AWS Lambda函数来处理DynamoDB中的数据。

我的下一步是实施基本胎儿的投票系统(upvote / downvote):

  • 每个注册用户每个项目只能投票一次,之后只允许更改该投票。
  • 需要向每个项目旁边的所有用户显示投票数。
  • 项目只有单项视图,并且(几乎)从不在列表视图中显示。
  • 我需要的唯一列表视图是"选票前100项"但是可以每天计算一次并提供缓存版本

我的目标是设计数据库/ lambda以最大限度地降低AWS的成本。使逻辑工作变得容易,但我不确定我的解决方案是否是最佳解决方案:

  • 我的items表目前有hashkey slug和sortkey version
  • 我创建了items-votes表,其中包含hashkey slug和sortkey user以及voted字段(包含-1或1)
  • 我将字段votes添加到items表格
  • API调用upvote / downvote插入item-votes表,但在检查用户尚未投票的约束之前。然后在第二个查询中更新items表,其中包含更新的投票计数。 (所以1个API调用和2个db查询)
  • 旧API调用以显示项目保持不变但同时获取新的votes计数(1个API调用和1个db查询)

我想知道是否可以通过避免新的items-votes表并在items表中存储用户投票来做得更好?看起来可以以这种方式保存一个查询,以及lambda执行时间的一半,但我担心它可能会使该表太大/太复杂。每个user字段都是10个字符的用户ID,因此如果项目获得数千票,我不确定Lambda / DynamoDB与原始解决方案相比的行为方式。

我不希望很快就会有数千张选票,但是对于一些项目并不是不可能发生的事情我想避免在不久的将来需要迁移到不同解决方案的情况

0 个答案:

没有答案