我有一组(~1.000.000)台可以发送消息的设备,每个设备都有一个 ID 并且可以发送多条消息。设备的子集(~10.000)应该能够使用我的服务,并且这些 ID 被放入白名单(DynamoDB 表)中。 给定持续的消息流,我希望仅将白名单中的一次保留在 DynamoDB 表中。
我一直在看的事情如下:
- 简单的方法是在 lambda 将数据写入 DynamoDB 时在代码中进行过滤,由于我首先需要查询白名单表来检查我可以写入哪些消息,因此不确定这种扩展效果如何。
- 我想要使用 DynamoDB 条件写入(或者如果有其他一些智能功能)来指定“仅当此项目存在于白名单中时才将其写入表中” 并让DynamoDB 引擎负责过滤。
我的问题是,在 DynamoDB 中是否有一些聪明的方法可以做到这一点?
最佳答案
这对 DynamoDB 来说既是福也是祸 - 起初,这很痛苦,但过了一会儿,DDB 的简单性开始闪耀 - 您可以在短时间内学习它的整个 API。
每个问题都是不同的,并且您在问题中提出了一些问题,因此我仅提供一些希望有所帮助的观点:
- 您无法查询/引用 DDB 中的另一个表,因此没有“智能”方法可以做到这一点。
- DDB 非常快,因此我不用担心数据库端的扩展问题。
- 先查询再写入是完全可以接受的模型,只需确保您有一个高效的索引并且您使用的是
GetItem
或Query
- 换句话说,不要使用扫描
。 - 如果您确实想最大程度地减少调用,那么您可以考虑创建一个简单的白名单 ID 内存缓存。这可能会导致扩展复杂性,具体取决于您的基础设施,但这很容易解决。如果您正在考虑这一点,那么我建议您将 DDB Streams 视为确保缓存最新的一种方法。但说实话,除非你确实有吞吐量问题,否则这个选项就有点矫枉过正了。
关于amazon-web-services - 仅将白名单项目写入 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63751327/