或查询 Amazon DynamoDB 中的多个属性

OR-query on multiple attributes in Amazon DynamoDB

我有一个 table 这样的:

运输

id (PK) createDt shipperId carrierId consigneeId
1 23 contact3 contact2 contact1
2 24 contact1 contact2 contact3
3 28 contact3 contact2 contact4

我的访问模式是:

我如何在 DyanomoDB 中执行此操作?

我想创建一个 GSI。但随后我需要为每个列创建一个单独的 GSI,这意味着我需要自己在列上加入查询结果。也许有更简单的方法。

我会在 table 上创建一个 GSI,然后将您的单条记录分成多条。 这会使写入稍微复杂一些,因为您编写了多个实体,但我会这样做:

PK SK type GSI1PK GSI1SK other attributes
TRANSP#1 TRANSP#1 transport createDt, (shipperId, carrierId, consigneeId)...
TRANSP#1 CONTACT#SHIP shipper-contact CONTACT#contact3 TRANSP#1#SHIP ...
TRANSP#1 CONTACT#CARR carrier-contact CONTACT#contact2 TRANSP#1#CARR ...
TRANSP#1 CONTACT#CONS consignee-contact CONTACT#contact1 TRANSP#1#CONS ...
  • 要获取有关给定传输 ID 的所有信息,请使用 PK=TRANSP#<id>
  • 进行查询
  • 要仅获取有关给定交通工具的基本信息,您可以在 PK=TRANSP#<id> and SK=TRANSP<id> 上执行 GetItem(如果联系信息相当静态,您也可以在此处复制联系信息。)
  • 要获取联系人参与的所有传输,您可以在 GSI1
  • 上执行 PK=CONTACT#<id> and SK starts with TRANSP

如果您确实需要服务器端排序,您可以选择不同的 GSI1SK,也许可以在其前面加上 dt 值,但我可能只在客户端进行排序。