DynamoDB中时间戳的数据类型[重复]

Posted

技术标签:

【中文标题】DynamoDB中时间戳的数据类型[重复]【英文标题】:Data type of timstamp in DynamoDB [duplicate] 【发布时间】:2019-08-15 00:28:40 【问题描述】:

我想创建一个使用时间戳作为范围键的表,以便轻松按日期对数据进行排序。

epoch 格式似乎是最容易使用的 -> 例如1437136300

javascript 中,我使用 new Date().getTime() 来获取 UTC 时间。

我的问题是在 DynamoDB、字符串或数字中保存日期的更好数据类型是什么?

找到了一些 AWS here 和 here 的参考资料,说可以使用 Number 作为时间戳的类型,因为它是所有数字的类型,包括 long

按日期查询会有什么不同吗?我正在寻找最佳做法。

【问题讨论】:

我不知道这里有任何最佳实践或性能偏好,但我通常更喜欢将数字存储为数字,而不是字符串。这样可以更轻松地对它们进行计算,例如时间戳加 500 毫秒或时间戳减一天。 谢谢@jarmod 我教过的也许有更好的方法 没有答案here,他在他的问题中指出了将时间戳保存为数字但没有人在任何答案中表示它 哦,拜托,我显然在在这里发布这个问题之前检查了互联网。找到了那个帖子,但没有帮助。 存储为数字将节省几个字节,这取决于您的访问模式和整体记录大小可能很重要 【参考方案1】:

正如您所指出的,字符串和数字都可以用作排序键。

历史参考:

@notionquest 在单独的thread 中确认字符串支持范围查询。

.

字符串:

至于哪个更好,我认为您应该更多地考虑您的用例。如果数据将被另一个 AWS 服务(如 Elastic Search 或 Cloud Watch)使用,那么将其存储在可以由这些服务直接使用的形式中会很有用。即ISO 8601 字符串

例子:

2016-02-15

2015-12-21T17:42:34Z

20150311T122706Z

.

数字

如果数据将被其他一些图形或分析库使用,则将其设为 数字 格式可能更有意义,以便可以直接使用而无需进一步转换。 p>

结论

简而言之,最佳做法取决于下游发生的情况。一般来说,最好将数据类型更改限制在尽可能少的范围内。

【讨论】:

感谢您的回答,我的数据库是无服务器 aws 应用程序的一部分,可以通过 Api Gateway 和 aws lambdas 通过 android 应用程序访问。 没问题 :) 那么当应用收到你的数据库信息时,它会用它做什么呢?按日期绘制?或将其显示为文本?该应用程序是否会一次从您的表中提取多个条目?还是只有一个? 日期更多的是与缓存相关,我只从 Dynamodb 获取最新记录(从上次获取)到应用程序。我显示按日期排序的记录,没有花哨的图表 我会在收到数据后检查您的预制件是否执行任何类型的“排序”功能。如果是这样,Number 将是首选的数据类型。如果没有,我会推荐 ISO 8601 字符串,因为它们允许您存储高达毫秒的详细信息,同时仍然可读,并且可以选择时区数据。 (现在可能没用,但以后有必要)

以上是关于DynamoDB中时间戳的数据类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

牧牛区块链生态,区块链中时间戳的作用

Hadoop SQL 中时间戳数据类型的奇怪行为

如何获得蜂巢中时间戳的平均差异

DynamoDB 最高效的日期类型

数组中时间戳之间的平均间隔

如何在熊猫数据框中设置时间戳的偏移量?