【问题标题】:DynamoDB sort order of Date RangeKeyDate RangeKey 的 DynamoDB 排序顺序
【发布时间】:2018-12-04 17:30:32
【问题描述】:

我有一个包含以下键值的 DynamoDB 表:一个简单的字符串 id 为HashKey,一个表示日期的字符串为RangeKey。日期字符串为YYYY-MM-DD 格式。

我现在想知道 DynamoDB 如何对其条目进行排序。当我在同一个HashKey 上查询多个RangeKey 值时,结果按日期升序排序。

但是,根据 Dynamo documentation,它将考虑所有非整数 RangeKey 的 UTF-8 字节值来排序。

当我现在保存以下 RangeKey 条目时:

  1. 2019-01-01
  2. 2018-12-04
  3. 2018-12-05

简单的DynamoDBMapper.query(...) 的输出结果是正确的:

  1. 2018-12-04
  2. 2018-12-05
  3. 2019-01-01

Dynamo 是按日期对 RangeKey 排序,还是按照与日期表示匹配的方式计算字节值?

【问题讨论】:

  • 您可能希望在存储之前将其转换为纪元并将其用作排序键。
  • 是的。但我想知道为什么排序/排序目前仍然按预期工作。

标签: amazon-web-services amazon-dynamodb aws-java-sdk


【解决方案1】:

它以 UTF-8 字节对其进行排序。它不知道您正在对日期进行排序,对于 DynamoDB,它只是一个字符串。

【讨论】:

  • 这就是我的想法和阅读。但我仍然无法解释为什么它目前按预期排序。
  • 4 > 5 and 9 > 8. 您选择创建日期的方式是年-月-日,这将始终使用字节码正确排序日期。如果它是日-月-年,那么它将不起作用。
  • @GaryHoliday,您是说按年-月-日存储将始终有效吗?我仍然不清楚如何。其次,你的评论中4>5是什么意思
  • @curiousengineer 由于日期存储为年-月-日,它将始终按 UTF-8 字节正确排序。当我说 4 > 5 时,这是一个错误,我的意思是 4 8。它只适用于按年-月-日排序,如果按日-月-年排序,则不会工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多