当前位置: 首页 > 知识库问答 >
问题:

DynamoDB-UUID并避免全表扫描

郗学
2023-03-14

这是我的用例:

我有一个带有200k对象的JSON Api。数据集看起来有点像这样:日期、自行车型号、以分钟为单位的生产时间。我使用Lambda从JSON Api中读取并通过超文本传输协议请求在DynamoDB中写入。Lambda函数每天运行并使用最新数据更新DynamoDB。

然后,我按日期检索数据,因为我想计算每天的平均生产时间,并将其放在第二个表中。Alexa技能连接到第二个表,并读取每天的平均值。

第一个问题:由于同一个自行车模型每天会产生多次,使用带有日期和自行车模型的复合主键不会给我一个唯一的键。我应该为条目创建一个UUID吗?或者有更好的解决方案吗?

第二个问题:对于计算,我每次都需要进行全表扫描,这非常昂贵,并且被许多人反对。如果不进行全表扫描,我如何解决这个问题?

第三个问题:对于我的用例,完全避免使用DynamoDB更好吗?那么,哪个AWS数据库更适合我的用例?

共有2个答案

朱自明
2023-03-14

有一个简单的数据库模型可用于此任务:

  • PartitionKey:UUID或使用提供唯一性的字段的任意组合
  • 排序键:生产日期,作为字符串,即2020-07-28

如果随后创建一个二级索引,将生产日期用作主键并包含生产时间,则可以查询(而不是扫描)特定日期的二级索引,并对生产时间执行所需的任何计算。然后,您可以独立地在辅助索引和表上设置所需的读/写容量。

关于第三个问题,我看不到使用DynamoDB完成此任务有任何真正的好处。任何RDS(即MySQL)、Redshift甚至S3 Athena都可以轻松处理此类用例。如果您需要实时分析,您甚至可以考虑AWS运动。

左丘子平
2023-03-14

>

  • 是的,uuid或任何其他唯一标识符(例如:日期自行车模型创建时间)作为pk是可以的。

    看来你的平均值日常工作是某种数据分析工作,而不是真正的事务工作。我建议使用支持数据分析的服务,如亚马逊红移。您应该能够使用Dynamodb流向这样的数据库服务添加数据。或者,您可以将数据流式传输到s3中,并使用类似Athena的服务来获取每日平均值。

  •  类似资料:
    • 我正在尝试使用DynamoDB并行扫描示例: <代码>http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelJavaScanning.html 我有200,000个项目,我已经进行了顺序代码扫描,并根据我的使用对其进行了稍微修改: 当这个代码完成时,计数器给出的正好是200000,然而,我还想尝试并行扫描。

    • 我是Java新手。我必须从2D数组向终端显示int系数。我想在同一行中为同一卖家提供每个值。有一个换行符(由于扫描仪?)。我一直在寻找分隔符system.in但我不明白如何使用它,如果这是合适的。 请帮帮我好吗?先谢谢你 最终结果: 输入卖家数量5 输入型号4的数量 卖家1 0 3. 2个 0

    • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

    • 我正在Android(移动设备a)上执行UUID过滤扫描,我有两个测试用例。 一个人在另一个Android设备(移动设备b)上使用一个名为BLE扫描仪的应用程序来创建一个具有两个测试服务的BLE服务器(每个服务都有自己唯一的UUID)。另一种是通过Arduino BLE服务器,为其服务定制UUID。 如果我使用移动设备B的BLE扫描仪应用程序并扫描arduino,我可以找到它,连接到它并查看服务以

    • 第一篇文章是关于Stack的,对于使用Python和DynamoDB编程来说,这是相当新的,但是我只是想在我的表上运行一个扫描,根据两个预定义的属性返回结果。 ---这是我的Python代码片段--- 我的发电机有4个磁场。 ID 日期 班次 安全 现在关于这个问题,在运行时,我得到了两个返回的表条目,而我应该只得到第一个条目...根据我的扫描标准,有“没有安全问题”的那个。 ---这是我的Dyn

    • 我们有一个设置,其中各种工作节点执行计算并更新DynamoDB表中的相对状态。该表充当工作节点活动的一种历史记录。看门狗节点需要定期扫描表,并构建一个表示工作节点及其作业的当前状态的对象。因此,我们的应用程序能够扫描表并按时间顺序检索数据(即按时间戳排序)是很重要的。表最终会太大,无法扫描到本地内存进行后期排序,所以我们扫描后无法排序。 从AWS留档读取主键: DynamoDB使用分区键值作为内部