我来自关系数据库背景,并尝试使用亚马逊的DynamoDB
我有一个表,其中包含一个哈希键"DataID"和一个范围"CreatedAt"以及一系列项目.
我正在尝试获取在特定日期之后创建的所有项目并按日期排序.这在关系数据库中非常简单.
在DynamoDB中,我能找到的最接近的是查询并使用大于filter的范围键.唯一的问题是,为了执行查询,我需要一个破坏目的的哈希键.
那么我做错了什么?我的表架构是错误的,哈希键不应该是唯一的吗?还是有另一种查询方式?
我是DynamoDB的新手.我希望创建一个表,它使用DeviceID作为哈希键,Timestamp作为我的范围键和一些数据.
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
Run Code Online (Sandbox Code Playgroud)
在SQL中,我们可以将datetime类型用于Timestamp,但在DynamoDB中没有.
似乎在 DynamoDB 中处理 Sort Key Date 对象(ISO 8061 格式)的共识是使用 STRING 键类型,其中查询案例将使用 BETWEEN 比较来查找两个日期(也是 ISO 8061)之间的结果,请参阅答案:
我的问题是确实的DynamoDB字符串比较“之间”,使上述功能的机制ALSO可以查询两个Date对象缝合在一起(例如:2018-05-01-2018-05-10)作为一个单一的排序密钥其中,第一个缝合日期总是在第二个缝合日期之前。
经过初步测试,答案似乎是肯定的,只要您的 BETWEEN 查询也有两个串联日期,这应该是可能的。
我希望有人可以帮助我弄清楚这是否可以安全/稳定地部署。
在我们进入背景之前,我想我会在这里发布我的测试用例,以明确我在问什么。
给定排序键:2018-05-01-2018-05-25
我正在构建一个可查询的 DynamoDB 航班组合表,我希望查询可以检查出发航班日期是否在某个日期之后,以及返回航班是否在某个日期之前。
基本上我的理解是,由于数字从左到右(年-月-日)级联的方式,DynamoDB 中 ISO 8061 日期的 BETWEEN 查询可以工作。如果是这种情况,那么将两个日期连接成一个排序键应该是安全的(在我的情况下)。
排序键值的表示将是...
我正在预先检查数据,以便可以假设离港航班(第一个连续日期)总是在返回航班(第二个连续日期)之前,如果它在我们的表中,因此给出一个 BETWEEN 操作,我的假设是这应该成为可能。
我会在更多测试后回帖,但我希望有人对 DynamoDB BETWEEN Query 函数在这种情况下的确切工作方式(以及原因)有更多经验。