之后不能创建唯一的分区密钥用于其他数据

时间:2017-10-14 07:36:18

标签: node.js amazon-web-services nosql amazon-dynamodb

我是AWS dynamoDB的新手。在我的研究中,我遇到了一个场景,"把它想象成一个在柜员窗前排成一排的银行。如果每个人都在一个出纳员排队,那么可以为更少的顾客服务。在不同的柜员窗口分配客户更有效。用于分发客户的良好分区密钥可能是客户编号,因为每个客户都不同。"

我有一个问题,如何找出每个柜员遇到的客户编号与同一个表(客户编号作为分区密钥)。

1 个答案:

答案 0 :(得分:0)

  

把它想象成一个在柜员窗前排成一排的银行。如果   每个人都在一个出纳员排队,可以为更少的顾客服务。它是   更高效地将客户分配到许多不同的柜员   视窗。分发客户的好分区键可能是   客户编号因为每个客户都不同。

上述句子的解释是关于DynamoDB存储分发如何发生以及它如何影响数据查询。假设分区键作为单独的数据库服务器。如果只有一个分区密钥,则所有查询都会转到该服务器,从而提高其利用率,从而限制单个服务器的吞吐量。如果您有多个分区键,则内部DynamoDB可以从多个服务器并行查找项目,而不会遇到单个分区服务器瓶颈。

  

客户编号是分区键,而柜员是行数据   我必须对每个客户编号运行查询以查找a的数据   特别的出纳员?

如果将数据存储在名为Customers的DynamoDB表中,只有客户编号作为主键,要查找特定的出纳员,则需要扫描整个DynamoDB表,这是非常低效的。

如果您只想直接查询特定的出纳项目。

  • 如果您想直接查询柜员信息,只需使用柜员ID,将柜员号创建为全局二级索引,并查询索引以查找柜员信息。
  • 如果您的查询涉及给定的客户编号和柜员ID以查找柜员信息,您可以重新创建具有Teller id作为排序键的表(如果它对您的数据模型有意义),以便您可以直接查询特定客户的柜员信息。