在DynamoDB中,我有一个表,其中每个记录都有两个日期属性,create_date
和last_modified_date
。这些日期采用ISO-8601格式,例如2016-01-22T16:19:52.464Z
。
我需要一种基于create_date
和last_modified_date
例如查询它们的方法
create_date > [some_date]
last_modified_date < [some_date]
通常,我需要获取所有记录在哪里[date_attr] [comparison_op] [some_date]
。
一种实现方法是在每条记录中插入一个虚拟固定属性,并创建一个将虚拟属性用作分区键和create_date
作为排序键的索引(同样适用于)last_modified_date
。
然后,我就可以通过提供固定的虚拟属性作为分区键查询它是这样,日期属性作为排序键,使用任何比较操作符<
,>
,<=
,>=
,等。
但这似乎并不好,看起来像是hack,而不是适当的解决方案/设计。有更好的解决方案吗?
NoSQL DB在某些方面并不擅长,但是您可以使用以下解决方案解决此问题:
将此表数据移动到SQL数据库中以进行搜索:这是有效的,因为您将能够根据需要进行查询,有时这可能很乏味,因为您需要在两个不同的DB之间同步数据
与Amazon CloudSearch集成:您可以将此表与CloudSearch集成,然后可以查询Cloudsearch而不是查询DynamoDB表
与Elasticsearch集成:Elasticsearch与CloudSearch相似,尽管它们各有利弊,最终结果是相同的-而不是查询DynamoDB,而是查询Elasticsearch
正如您在问题中提到的,添加GSI索引
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句