DynamoDB-为PartitionKey合并两个表属性(列)?

问题描述 投票:0回答:1

我正在为一个金融应用程序设计我的第一个DynamoDB数据库,在该数据库中,用户创建了多个金融投资组合,其中包含诸如帐户,投资,交易等对象。我对分区键的最佳做法并不百分百清楚。

我对以下用例有两个问题:

1。)大多数表由行组成,其中应用程序中的每个用户每个投资组合(帐户,例如投资)将拥有约10到200个对象。由于我通过userId和PortfolioId加载数据,因此userId是分区键的第一部分。但是,是为PortfolioId创建排序键还是将其与userId串联起来更好?

1.1) PartitionKey: userId, SortKey: portfolioId
or
1.2) PartitionKey: userId + portfolioId

2。)投资组合中的交易每用户数量将更大,范围在10,000到250,000之间。同样,concat更好吗,特别是考虑到不是所有事务都一次加载,而是仅最近一次(基于transactionDate)加载?

2.1) PartitionKey: userId, SortKey: portfolioId
or
2.2) PartitionKey: userId + portfolioId, SortKey: transactionDate

由于我的get方法将仅获取最新的事务,因此在transactionDate上使用了一个附加过滤器。

->我的理解是1.2和2.2是更好的设计,因为它们应该使检索速度更快,同时仍可以在分区之间均匀地分布数据数据,因为密钥以userId开头,应用程序应该具有很多。任何建议或经验,对此表示赞赏!


UPDATE:

我对桌子还不太清楚。有一个投资组合表,您可以通过userId查询所有投资组合,从那里应用程序一次仅加载一个投资组合。

无需查询诸如帐户之类的表上的所有投资组合。鉴于此,是1.2和2.2还是不是一个好的模式?

对于带有列的“帐户”表

1.1)
accountId,
userId,        --> PartitionKey
portFolioId,   --> SortKey
accountName,
accountType,
...

1.2)
accountId,
userId + portFolioId, --> PartitionKey
accountName,
accountType,
...

对于“交易”

2.1)
transactionId,
userId,        --> PartitionKey
portFolioId,   --> SortKey
transactionDate,     
amount,
accountSourceId, 
accountTargetId,
...

2.2)
transactionId,
userId + portFolioId, --> PartitionKey
transactionDate,      --> SortKey   
amount,
accountSourceId, 
accountTargetId,
...
amazon-web-services amazon-dynamodb primary-key
1个回答
1
投票
您肯定想要1.1。它允许您对userId执行查询并获取该用户的所有投资组合。 1.2。是反模式,userId没有执行任何有用的功能,您需要userId

PortfolioId才能获得项目。在这种情况下,最好在分区键上使用profolioId。
© www.soinside.com 2019 - 2024. All rights reserved.