php - 如何在条件之间应用带有分区键的 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 中执行上述条件。
解决方案
如果您使用的是分区键(而不是排序键),那么您有 2 个选择。
您要么使用支持ScanFilter的Scan,BETWEEN
要么需要单独对每个分区键执行查询。
AWS 在其文档中发布了使用 PHP 扫描的示例。
通常RCU
,您会尽量避免使用 Scans,因为从资源的角度来看它的效率非常低,并且在尝试检索结果时会消耗大量资源,而 Query 更有效。
这是因为扫描操作是在所有分区上执行的,并且在检索数据之后应用了任何过滤器,而查询操作是在单个分区上执行的,并且在检索数据之前应用了过滤器。
如果这对您来说是个问题,您可以考虑重构 DynamoDB 表以允许使用更好的分区键并将数据范围用作表的排序键。或者,您可以在表上创建一个GSI,以使所有数据共享一个分区键,并将日期范围用作排序键。这将允许您使用查询条件过滤排序键。
推荐阅读
- javascript - 无法为范围角度注册 ServiceWorker
- delphi - Delphi 10 中的“下限超过上限”错误
- javascript - 如何在 vue js 中设置输入表单控件默认聚焦,直到输入值?
- python - 在 Python 中使用 pd.Series.value_counts。使用 numpy.where、numpy.unique 替换数组
- java - 使用本地数据库的 WSO2 API Manager 最终用户自定义身份验证策略
- reactjs - 使用 React 测试库测试嵌套的 JSX
- python - 如何在 PyQtWebEngine 中启用隐身模式?
- tensorflow-federated - 使用参与者的泊松子抽样联合学习过程
- regex - Apache NiFi:如何根据名称从最新目录中获取文件?
- javascript - 如何在接口中未定义的打字稿类中插入属性