7

我来自 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 的经验,请回顾一下我到目前为止所做的事情,如果我走在正确的轨道上,或者我是否处于正确的轨道上,或者我是否处于正轨,最好进行一些更改(快速)或我会被搞砸的。您建议进行哪些更改?

4

0 回答 0