首页 > 解决方案 > 仅将列入白名单的项目写入 DynamoDB

问题描述

我有一组(~1.000.000)可以发送消息的设备,每个设备都有一个 ID 并且可以发送多条消息。设备的一个子集(约 10.000 个)应该能够使用我的服务,并且 ID 被放入白名单(DynamoDB 表)中。给定持续不断的消息流,我只希望将白名单中的一次保留在 DynamoDB 表中。

我一直在看的东西如下:

  1. 天真的方法是在 lambda 将数据写入 DynamoDB 时在代码中进行过滤,鉴于我首先需要查询白名单表以检查我可以写入哪些消息,因此不确定这将如何扩展。
  2. 我想使用 DynamoDB 条件写入(或者如果有其他一些智能功能)来指定“仅当它存在于白名单中时才将此项写入表”并让 DynamoDB 引擎负责过滤。

我的问题是在 DynamoDB 中是否有一些聪明的方法可以做到这一点?

标签: amazon-web-servicesnosqlamazon-dynamodb

解决方案


这对 DynamoDB 既是福也是祸——起初,它是一种痛苦,但不久之后,DDB 的简单性开始大放异彩——你可以在很短的时间内学习它的整个 API。

每个问题都是不同的,您在问题中提出了一些问题,所以我只提供一些希望对您有所帮助的观点:

  • 您不能在 DDB 中查询/引用另一个表,因此没有“聪明”的方法可以做到这一点。
  • DDB 非常快,所以我不会担心数据库端的扩展。
  • 在写之前查询是一个完全可以接受的模型,只要确保你有一个有效的索引并且你正在使用GetItem或者Query- 换句话说,不要使用Scan.
  • 如果您真的想最小化调用,那么您可以考虑创建一个简单的白名单 ID 内存缓存。这可能会导致扩展复杂性,具体取决于您的基础架构,但这很容易解决。如果这是您正在考虑的事情,那么我建议您将 DDB Streams 视为一种确保缓存是最新的方法。但老实说,除非您确实遇到吞吐量问题,否则此选项将是矫枉过正。

推荐阅读