【问题标题】:Using timestamp as an Attribute in DynamoDB在 DynamoDB 中使用时间戳作为属性
【发布时间】:2018-03-05 21:40:33
【问题描述】:

我对 DynamoDB 很陌生,但在 Cassandra 方面有一些经验。我正在尝试调整我在 Cassandra 中遵循的模式,其中每一列都代表一个带时间戳的事件,我想知道它是否会优雅地延续到 DynamoDB 中,或者我是否需要改变我的方法。

我的目标是通过使用毫秒自纪元时间戳作为属性名称来查询日期范围内的一组文档。我成功地存储了以下内容,因为每个报告都是生成的,每个新报告都被添加到自己的列下:

{ PartitionKey:customerId,
  SortKey:reportName_yyyymm,
  '#millis_1#':{'report':doc_1},
  '#millis_2#':{'report':doc_2},
  . . .
  '#millis_n#':{'report':doc_n}
}

我的问题是,给定基于毫秒的日期范围,以及随附的分区和排序键,是否可以查询该范围内的属性集,或者我必须检索匹配键的所有列并过滤它们在客户端?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    欢迎使用最强大的 NoSQL 数据库;)

    要从正面消息开始,没有办法查询特定属性。您可以在查询中投影某些属性。但是您必须编写自己的逻辑来确定哪些属性或列应包含在投影查询中。为了接近您的解决方案,您可以在以毫秒为键的项目内使用地图属性。但是,在开始这条道路时,您还必须注意另一件事。

    DynamoDB 中每个项目的最大总项目大小为 400KB,包括键名和属性名称。(Limits in DynamoDB Items) 这意味着您只能在一个项目中存储这么多属性。如果您打算将实际报告放入属性中,则尤其如此。我不建议这样做,因为每次从整个项目中获得一个属性时,您都会消耗读取容量单位。您最好将此数据与地图中的键一起放在单独的表中。但说实话,在 DynamoDB 中,我会将整个事情分开,只需将毫秒添加到排序键,并使每个文档都成为自己的项目。这样您就可以直接查询这些项目,并且可以使用“between” where 子句来选择特定的日期时间范围。请让我理解你的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2017-01-18
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多