使用时间戳作为DynamoDB中的属性

问题描述 投票:0回答:1

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

我的目标是使用milliseconds-since-epoch时间戳作为属性名称来查询日期范围内的一组文档。我在生成每个报告时成功存储以下内容,每个新报告都添加到其自己的列下:

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

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

amazon-dynamodb
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.