【问题标题】:Creating unique partition keys can't be used afterwards for other data创建唯一的分区键之后不能用于其他数据
【发布时间】:2017-10-14 18:08:14
【问题描述】:

我是 AWS dynamoDB 的新手。在我的研究中,我遇到了这样一个场景,“把它想象成一家银行,在柜员窗口前排起了长队。如果每个人都在一个柜员处排队,那么可以服务的客户就会减少。将客户分布在多个不同的柜员窗口会更有效率. 用于分配客户的良好分区键可能是客户编号,因为每个客户的编号都不同。”

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

【问题讨论】:

  • 当您引用某人或某文件时,请提供引用的出处。上面的引用似乎来自here

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


【解决方案1】:

可以把它想象成一家在柜员窗口前排着长队的银行。如果 每个人都在一个柜员处排队,可以为更少的客户提供服务。这是 更有效地在许多不同的柜员之间分配客户 视窗。分配客户的一个好的分区键可能是 客户编号,因为每个客户的编号都不相同。

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

客户编号是分区键,柜员是行数据 我必须对每个客户编号运行查询才能找到 出纳员?

如果您将数据存储在名为Customers的DynamoDB表中,仅以客户编号作为主键,要找到特定的柜员,您需要扫描整个DynamoDB表,效率非常低。

如果您只想直接查询特定柜员项目。

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

【讨论】:

  • 谢谢你的解释,但我这里要问的是,我是不是必须去所有的客户号码(分区键)才能得到一个柜员的信息?
  • 客户编号和柜员是什么关系?
  • 客户编号是分区键,柜员是行数据 那么我是否必须对每个客户编号运行查询才能找到特定柜员的数据?
  • 我已经用详细信息更新了答案。如果有进一步的说明,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多