首页 > 解决方案 > 如何在条件之间应用带有分区键的 DynamoDB 表?

问题描述

像这样的sql查询:

select * from table where Date BETWEEN '2020-07-01' AND '2020-08-18'
           OR
select * from table where Date >= '2020-07-01' AND Date <= '2020-08-18'

如何使用分区键在 DynamoDB 中执行上述条件。

标签: phpamazon-web-servicescodeigniteramazon-dynamodb

解决方案


如果您使用的是分区键(而不是排序键),那么您有 2 个选择。

您要么使用支持ScanFilter的Scan,BETWEEN要么需要单独对每个分区键执行查询。

AWS 在其文档中发布了使用 PHP 扫描的示例

通常RCU,您会尽量避免使用 Scans,因为从资源的角度来看它的效率非常低,并且在尝试检索结果时会消耗大量资源,而 Query 更有效。

这是因为扫描操作是在所有分区上执行的,并且在检索数据之后应用了任何过滤器,而查询操作是在单个分区上执行的,并且在检索数据之前应用了过滤器。

如果这对您来说是个问题,您可以考虑重构 DynamoDB 表以允许使用更好的分区键并将数据范围用作表的排序键。或者,您可以在表上创建一个GSI,以使所有数据共享一个分区键,并将日期范围用作排序键。这将允许您使用查询条件过滤排序键。


推荐阅读