首页 > 解决方案 > DynamoDB - 它可以用于没有自然分区键的数据吗?

问题描述

我正在寻找 DynamoDB 来存储一些数据,因为它看起来可能是一种具有成本效益的解决方案,但经过一些研究,我认为它可能不适合我的用例,因为我无法找到分区和排序的相关唯一值键。

我的数据是各种植物种类的一系列自然事件记录,例如有人注意到山毛榉树叶出现的日期和地点。

{
  "species": "Beech",
  "event": "Budburst",
  "year": 2015,
  "season": "Spring",
  "date": "12/04/2015",
  "latitude": "0.00000",
  "longitude": "40.000"
}

该应用程序的主要查询是获取某个物种在某一年的某一事件的所有数据:

端点:events/:species/:event-type/:year

这可能会返回几千个事件,然后可以在地图中显示这些事件。

如果这是 MongoDB,那么我可能会在species+eventType+year. 它不会是唯一索引,但至少只会扫描几千个结果而不是整个表,所以它不会太糟糕。

不过,我不确定如何在 DynamoDB 中实现相同的目标,或者即使有可能,因为分区键或分区 + 排序键组合似乎必须是唯一的。

使这项工作的唯一方法是使分区键具有递增的唯一事件ID,然后将species+eventType+year字符串作为排序键?

如果有任何其他模式,我会很感激听到它们。

谢谢阅读。

标签: amazon-dynamodb

解决方案


听起来自然主键将作为哈希键的物种和作为排序键的 eventType+timeStamp。(使用 ISO-8601 作为时间戳,以便您可以使用KeyConditionExpressionbegins_with中的函数进行查询。)

如果给定物种和事件类型可能同时存在多个事件,或者如果您只是缺少事件的精确时间戳,那么您可以使用 UUID 作为哈希键,并使用物种创建 GSI作为散列键和 eventType+year,甚至是 species+eventType+year 作为散列键,因为主键在 GSI 中不必是唯一的

另外,这里有一个有用的相关问题,“如何按日期(范围键)查询 DynamoDB,没有明显的哈希键?


推荐阅读