我来自SQL和MongoDB背景,并且真的想将DynamoDB用于新项目。到目前为止,它是可以容忍的。我将数据写入DynamoDB并使用流将我的数据神奇地摄取到Elastic Search进行搜索。它做了我需要做的一切。
但是,现在我正处于一个我希望能够直接从DynamoDB中更有效地查询数据的地方。
受影响的实体是:
我正在处理我的付款服务,通过该服务发起,更新,审核和查询付款。使用以下属性创建付款:
使用DynamoDB,我希望能够进行以下查询:
以上的某些组合(e.x.“拒绝来自供应商aaaa-bbbb的付款”)。
在official DynamoDB documentation之后,我正在尝试设置重载全局二级索引来解决问题。
我现在还没有开始设置付款,因为这感觉非常奇怪,但我确实开始为reportingPeriods设计密钥和索引,以便我能够掌握它。这就是我现在所拥有的:
主键是id,sort。我的计划是使用相同的表来报告时间段和付款,因为DynamoDB文档说您可以为整个应用程序使用定义明确的表(我保持我的数据比这更加孤立并且每个微服务使用一个表)。
我承认在保持冗余行更新并通过许多字段查询时会有开销,但假设我对维护很满意(我还在质疑自己)......我的问题就在这里。我正在做对吗?
我假设我要查询的任何内容,我需要添加带有ID和正确“排序”字段的新行。 E.x.假设我们有一个ID为dddd-eeee的付款,属于供应商aaaa-bbbb,状态为1.我假设要按供应商和状态查询此付款,我应该添加一个包含以下字段的附加项目:
这是对的吗?如果我想通过vendorId + status IN(1,3)查询怎么办?
如果您有超载GSI的经验,请查看我到目前为止所做的工作,如果我走在正确的轨道上,或者我是否也很谨慎,方便,更好地做出一些改变,请告诉我。快点)或者我会被搞砸了。你推荐什么改变?