我来自 SQL 和 MongoDB 背景,并且非常想将 Amazon DynamoDB 用于新项目。到现在还可以忍受。我将数据写入 DynamoDB 并使用流神奇地将我的数据提取到 Elastic Search 进行搜索。它做我需要它做的一切。
但是,现在我正处于我希望能够更有效地直接从 DynamoDB 查询的数据的地步。
受影响的实体是:
- 合同
- 供应商
- 报告期
- 付款
我正在开发我的付款服务,通过该服务发起、更新、审核和查询付款。使用以下属性创建付款:
- 合同编号
- fromVendorId(可为空)
- toVendorId
- 报告期 ID
- 数量
- 地位
使用 DynamoDB,我希望能够进行以下查询:
- 按日期范围获取报告期
- 通过 reportPeriod 获取付款
- 通过 fromVendor 获取付款
- 通过 toVendor 获取付款
- 按状态获取付款
上述的某种组合(例如“来自供应商 aaaa-bbbb 的拒绝付款”)。
按照官方 DynamoDB 文档,我正在尝试设置 Overloaded Global Secondary Indexes 来解决问题。
我现在还没有开始设置付款,因为这感觉很奇怪,但我确实开始设计报告周期的键和索引,以便我可以掌握它的窍门。这是我现在拥有的:
主键是id,排序。我的计划是对报告周期和付款使用同一个表,因为 DynamoDB 文档说您可以为整个应用程序使用一个定义明确的表(我让我的数据比这更孤立,每个微服务使用一个表)。
我承认在保持冗余行最新并通过许多字段进行查询方面会有开销,但假设我对维护没问题(我仍在质疑自己)......我的问题真的是......我做得对吗?
我假设我想查询的任何内容都需要添加带有 ID 和正确“排序”字段的新行。例如,我们有一个 ID 为 dddd-eeee 的付款,属于供应商 aaaa-bbbb,状态为 1。我假设要按供应商和状态查询此付款,我应该添加一个包含以下字段的附加项目:
- id: 付款-aaaa-bbbb
- 排序:fromVendorId,状态
- 值:aaaa-bbbb,1
那是对的吗?如果我想通过 vendorId + status IN (1,3) 查询怎么办?
如果您有重载 GSI 的经验,请回顾一下我到目前为止所做的事情,如果我走在正确的轨道上,或者我是否处于正确的轨道上,或者我是否处于正轨,最好进行一些更改(快速)或我会被搞砸的。您建议进行哪些更改?