typescript - 从 DynamoDB 获取记录,有 2 个条件且不使用扫描
问题描述
我需要从 DynamoDB 中获取具有 2 个条件的数据。
示例:条件是 If (isValue==true or xdate < todaysDate)
then fetch。我需要在不使用 Scan 的情况下实现这一点。因为扫描需要很多时间。在这种情况下,isValue 是全局二级索引。请让我知道如何根据(isValue==true or xdate < todaysDate)
. 我正在使用打字稿连接到 DynamoDB。
[P-key] [Sort-key] [GSI]
ID SID isValue xdate
1 234566 TRUE 2021-10-07T10:33:44Z
2 645567 FALSE 2021-10-06T10:33:44Z
3 546688 FALSE 2021-10-07T10:33:44Z
4 545678 TRUE 2021-10-05T10:33:44Z
解决方案
有几种方法可以在不使用操作的情况下实现您想要的scan
。首先想到的是“稀疏索引”。
您已经在属性上创建了一个全局二级索引 (GSI) isValue
,这是一个很好的开始!与其创建一个由字段的值确定该值是否存在的布尔字段,不如考虑isValue
仅在为真时才在项目上包含该属性isValue
。
在上面的示例中,这意味着 ID 为 1 和 4 的项目将包含该isValue
属性,而 ID 为 2 和 3 的项目将不包含该isValue
属性。例如:
DynamoDB 将仅isValue
在 GSI 中包含具有该属性的项目,然后您可以根据日期范围查询 GSI。您的 GSI 将如下所示:
在此示例中,您可能不会使用 的 GSI 分区键isValue
,因为true
它不是特别引人注目的分区键(可能使用ID
项目的 )。但是,此示例旨在说明如何使用 GSI 而不是布尔属性过滤 DynamoDB 中的项目。
推荐阅读
- .net - 使 ClickOnce 完全信任应用程序“绿色”
- azure - UserSecretsId 阻止将 F# ASP.NET Core 应用程序部署到 Azure 应用程序服务
- cordova-plugins - Crodova vk 插件不起作用[无法从清单文件中读取包名]
- python - Heroku python 应用程序抛出错误 - KeyError: 'pip._vendor.urllib3.util.queue'
- reporting-services - rdl一页可以显示多少行
- javascript - 如何使用 JavaScript 从 API 获取 XML 响应?
- db2 - BLOB 到字符串的转换 - DB2
- javascript - 绘制到画布或用作图像源时缺少 SVG 图像和图案
- python - 如何在python中继承类(odoo框架控制器)
- office-js - DialogueAsync API 无法打开 Google Oauth url