amazon-web-services - DynamoDB - UUID 并避免全表扫描
问题描述
这是我的用例:
我有一个带有 200k 个对象的 JSON Api。数据集看起来有点像这样:日期、自行车型号、生产时间(以分钟为单位)。我使用 Lambda 从 JSON Api 读取并通过 http 请求在 DynamoDB 中写入。Lambda 函数每天运行并使用最新数据更新 DynamoDB。
然后我按日期检索数据,因为我想计算每天的平均生产时间并将其放入第二个表中。一个 Alexa 技能连接到第二个表并读出每天的平均值。
第一个问题:由于同一自行车型号每天生产多次,使用带有日期和自行车型号的复合主键不会给我一个唯一的键。我应该为条目创建一个 UUID 吗?还是有更好的解决方案?
第二个问题:对于计算,我每次都需要进行全表扫描,这是非常昂贵的,许多人不建议这样做。如何在不进行全表扫描的情况下解决此问题?
第三个问题:在我的用例中完全避免使用 DynamoDB 会更好吗?那么哪个 AWS 数据库更适合我的用例呢?
解决方案
是的,作为 pk 的 uuid 或任何其他唯一标识符(例如:日期+自行车型号+创建时间)都可以。
看起来你的平均价值日常工作是某种数据分析工作,而不是真正的交易工作。我建议使用服务支持数据分析,例如 Amazon Redshift。您应该能够使用 Dynamodb 流将数据添加到此类数据库服务。或者,您可以将数据流式传输到 s3 并使用 Athena 之类的服务来获取每日平均值。
推荐阅读
- javascript - 验证 ajax 错误
- c# - 使用 Unity 多显示器如何更改与 Unity 显示器关联的物理显示器?
- c# - 需要 C# winform 编码以通过单击保存在具有适当凭据的网络共享文件夹中存储和检索多个文件(excel、pdf、docx)?
- node.js - AWS lambda 和 dynamodb 分页
- apache-spark - 为什么这会转换为火花中的交叉连接?
- javascript - 如何在我们的项目中链接多个 css 和 js 文件而不在每个其他文件中明确提及它
- stripe-payments - Stripe - 具有第一期长度的每月订阅
- java - 如何停止媒体播放器中的可运行文件?
- r - irkernel 在使用大数据帧的简单命令时非常慢
- javascript - 支持ajax的bootstrap标签,需要javascript回调函数