相关疑难解决方法(0)

按日期查询DynamoDB

我来自关系数据库背景,并尝试使用亚马逊的DynamoDB

我有一个表,其中包含一个哈希键"DataID"和一个范围"CreatedAt"以及一系列项目.

我正在尝试获取在特定日期之后创建的所有项目并按日期排序.这在关系数据库中非常简单.

在DynamoDB中,我能找到的最接近的是查询并使用大于filter的范围键.唯一的问题是,为了执行查询,我需要一个破坏目的的哈希键.

那么我做错了什么?我的表架构是错误的,哈希键不应该是唯一的吗?还是有另一种查询方式?

amazon-web-services nosql amazon-dynamodb

86
推荐指数
4
解决办法
8万
查看次数

DynamoDB中的时间戳应该使用什么数据类型?

我是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中没有.

  1. 我应该使用哪种数据类型?串?数?
    在此输入图像描述

  2. 对于所选的数据类型,我应该写入什么样的时间戳格式?ISO格式(例如:2016-11-11T17:21:07.5272333Z)或纪元时间(例如:1478943038816)?

  3. 我需要在一段时间内搜索表格,例如:2015年1月1日上午10:00:00至2016年12月31日11:00:00

datetime amazon-web-services sqldatatypes amazon-dynamodb

68
推荐指数
4
解决办法
6万
查看次数

由两个 ISO 8061 日期组成的复合排序键的 DynamoDB 查询是否返回正确的结果(与 BETWEEN)?

似乎在 DynamoDB 中处理 Sort Key Date 对象(ISO 8061 格式)的共识是使用 STRING 键类型,其中查询案例将使用 BETWEEN 比较来查找两个日期(也是 ISO 8061)之间的结果,请参阅答案:

  1. 是否可以将日期时间保存到 DynamoDB?

我的问题是确实的DynamoDB字符串比较“之间”,使上述功能的机制ALSO可以查询两个Date对象缝合在一起(例如:2018-05-01-2018-05-10)作为一个单一的排序密钥其中,第一个缝合日期总是在第二个缝合日期之前。

经过初步测试,答案似乎是肯定的,只要您的 BETWEEN 查询也有两个串联日期,这应该是可能的。

我希望有人可以帮助我弄清楚这是否可以安全/稳定地部署。

在我们进入背景之前,我想我会在这里发布我的测试用例,以明确我在问什么。

给定排序键:2018-05-01-2018-05-25

  1. 查询 BETWEEN 2018-05-01-2018-05-20 和 2018-05-01-2018-05-26(RETURNS 项)
  2. 在 2018-05-01-2018-05-20 和 2018-05-01-2018-05-24 之间查询(未找到数据
  3. 查询 BETWEEN 2018-05-01-2018-05-20 和 2018-05-01-2018-05-25(RETURNS 项)
  4. 在 2018-05-02-2018-05-20 和 2018-05-02-2018-05-26 之间查询(未找到数据

背景


我正在构建一个可查询的 DynamoDB 航班组合表,我希望查询可以检查出发航班日期是否在某个日期之后,以及返回航班是否在某个日期之前。

基本上我的理解是,由于数字从左到右(年-月-日)级联的方式,DynamoDB 中 ISO 8061 日期的 BETWEEN 查询可以工作。如果是这种情况,那么将两个日期连接成一个排序键应该是安全的(在我的情况下)。

排序键值的表示将是...

  • 出发日期1-返回日期2
  • 年月日年月日

我正在预先检查数据,以便可以假设离港航班(第一个连续日期)总是在返回航班(第二个连续日期)之前,如果它在我们的表中,因此给出一个 BETWEEN 操作,我的假设是这应该成为可能。

我会在更多测试后回帖,但我希望有人对 DynamoDB BETWEEN Query 函数在这种情况下的确切工作方式(以及原因)有更多经验。

database-design database-schema amazon-dynamodb

5
推荐指数
1
解决办法
1554
查看次数