DynamoDB重载全球二级索引 - 我做得对吗?

时间:2018-05-23 01:48:17

标签: amazon-web-services nosql amazon-dynamodb dynamodb-queries amazon-dynamodb-index

我来自SQL和MongoDB背景,并且真的想将DynamoDB用于新项目。到目前为止,它是可以容忍的。我将数据写入DynamoDB并使用流将我的数据神奇地摄取到Elastic Search进行搜索。它做了我需要做的一切。

但是,现在我正处于一个我希望能够直接从DynamoDB中更有效地查询数据的地方。

受影响的实体是:

  • 合同
  • 供应商
  • 报告期限
  • 付款

我正在处理我的付款服务,通过该服务发起,更新,审核和查询付款。使用以下属性创建付款:

  • contractId
  • fromVendorId(nullable)
  • toVendorId
  • reportingPeriodId
  • 金额
  • 状态

使用DynamoDB,我希望能够进行以下查询:

  • 按日期范围获取报告期
  • 通过reportingPeriod获取付款
  • 通过fromVendor
  • 付款
  • 通过toVendor付款
  • 按状态付款

以上的某些组合(e.x.“拒绝来自供应商aaaa-bbbb的付款”)。

official DynamoDB documentation之后,我正在尝试设置重载全局二级索引来解决问题。

我现在还没有开始设置付款,因为这感觉非常奇怪,但我确实开始为reportingPeriods设计密钥和索引,以便我能够掌握它。这就是我现在所拥有的:

Keys

Indexes

主键是id,sort。我的计划是使用相同的表来报告时间段和付款,因为DynamoDB文档说您可以为整个应用程序使用定义明确的表(我保持我的数据比这更加孤立并且每个微服务使用一个表)。

我承认在保持冗余行更新并通过许多字段查询时会有开销,但假设我对维护很满意(我还在质疑自己)......我的问题就在这里。我正在做对吗?

我假设我要查询的任何内容,我需要添加带有ID和正确“排序”字段的新行。 E.x.假设我们有一个ID为dddd-eeee的付款,属于供应商aaaa-bbbb,状态为1.我假设要按供应商和状态查询此付款,我应该添加一个包含以下字段的附加项目:

  • id:Payment-aaaa-bbbb
  • sort:fromVendorId,status
  • 值:aaaa-bbbb,1

这是对的吗?如果我想通过vendorId + status IN(1,3)查询怎么办?

如果您有超载GSI的经验,请查看我到目前为止所做的工作,如果我走在正确的轨道上,或者我是否也很谨慎,方便,更好地做出一些改变,请告诉我。快点)或者我会被搞砸了。你推荐什么改变?

0 个答案:

没有答案