在不使用AWS一次性加载整个集合的情况下加载和更新许多记录的好方法是什么?

时间:2016-10-22 20:55:08

标签: amazon-web-services lambda relational-database

我想在AWS中一次性加载和处理一堆记录(1m +),而不是在AWS中一次加载整个集合。

具体而言,我正在开发一个将用户匹配在一起的系统。

  1. 用户提交项目评级
  2. 选择其他用户对同一项目的所有评分(1m +)
  3. 使用两个用户的新关系强度为每个评级更新另一个表中的记录。
  4. 这两个表格如下:

    RATINGS: userID, itemID, rating
    
    RELATIONSHIPS: userID1, userID2, relationshipStrength
    

    我想处理评级而无需一次加载整套(1m +)。我想逐个处理每个评级,进行比较,更新关系并继续下一个。数据的一致性和准确性并不重要 - 如果有几个关系错过了它。

    哪些AWS工具可以很好地实现这一目标?

    我正在调查dynamodb + lamda,但(我相信)这需要加载整套:

    1. 将评级保存至dynamodb
    2. Dynamodb触发lambda
    3. Lambda查询来自dynamodb的所有其他评级(希望避免这种情况)
    4. 遍历每个评级并更新另一个dynamodb表中的关系
    5. 我想避免在步骤3中将整个集合加载到内存中。

1 个答案:

答案 0 :(得分:0)

如果您只处理100万条记录,我建议您编写一个程序来执行此操作 in memory ,而不是不断查询数据库。它运行得更快。

内存要求每个记录只有几个字节(例如,评级表为6个字节,“关系”表为6个字节,加上开销)。拥有100万个评级(约6MB),比如10,000个用户交叉引用1000个用户(约60MB),您可以将其放入RAM中。

如果内存有问题,但您不需要经常进行此计算,则可以在竞价定价下启动内存优化的EC2实例,并且相对便宜。

当然,如果您打算在将来进行扩展,那么您需要一种更好的方法来做到这一点并不需要内存中的所有内容,例如使用SQL数据库或在多个工作者之间分配工作