gpt4 book ai didi

amazon-dynamodb - 我是否应该始终使用哈希和范围主键类型创建我的 DynamoDB 表?

转载 作者:行者123 更新时间:2023-12-04 01:46:36 29 4
gpt4 key购买 nike

在文档( http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/APISummary.html )中,它指出:

You can query only tables whose primary key is of hash-and-range type





we recommend that you design your applications so that you can use the Query operation mostly, and use Scan only where appropriate



它没有直接说明,但这是否使使用散列和范围主键成为最佳实践?

编辑:

回答 TL;DR:使用对您的数据模型有意义的任何主键类型,并使用二级索引以获得更好的查询支持。

引用:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

http://www.allthingsdistributed.com/2013/12/dynamodb-global-secondary-indexes.html

https://forums.aws.amazon.com/thread.jspa?messageID=604862

In what situation do you use Simple Hash Keys on DynamoDB?

最佳答案

选择使用哪个键取决于特定场景的用例和数据要求。例如,如果您要存储用户 session 数据,则使用范围键可能没有多大意义,因为每个记录都可以由 GUID 引用并直接访问而无需分组要求。一般而言,一旦您知道 Session Id,您就可以通过键获得特定的项目。另一个示例可能是存储用户帐户或配置文件数据,每个用户都有自己的数据,您很可能会直接访问它(通过用户 ID 或其他方式)。

但是,如果您正在存储订单项,那么范围键更有意义,因为您可能希望检索按订单分组的项目。

在数据模型方面,Hash Key 允许您从表中唯一标识一条记录,Range Key 可以选择性地用于对通常一起检索的几条记录进行分组和排序。示例:如果您正在定义一个聚合来存储订单项,则订单 ID 可以是您的哈希键,而订单项 ID 可以是范围键。每当您想从特定订单中搜索订单项目时,您只需通过哈希键(订单 ID)进行查询,您将获得所有订单项目。

您可以在下面找到使用这两个键的正式定义:

"Composite Hash Key with Range Key allows the developer to create a primary key that is the composite of two attributes, a 'hash attribute' and a 'range attribute.' When querying against a composite key, the hash attribute needs to be uniquely matched but a range operation can be specified for the range attribute: e.g. all orders from Werner in the past 24 hours, or all games played by an individual player in the past 24 hours." [VOGELS]



所以 Range Key 为 Data Model 添加了分组能力,然而,这两个 Key 的使用也对 Storage Model 有一定的影响:

"Dynamo uses consistent hashing to partition its key space across its replicas and to ensure uniform load distribution. A uniform key distribution can help us achieve uniform load distribution assuming the access distribution of keys is not highly skewed." [DDB-SOSP2007]



Hash Key 不仅允许唯一标识记录,而且是保证负载分配的机制。范围键(使用时)有助于指示将大部分一起检索的记录,因此,也可以针对此类需求优化存储。

选择正确的键来表示您的数据是您设计过程中最关键的方面之一,它直接影响您的应用程序的性能、规模和成本。

脚注:
  • 数据模型是我们感知和操作数据的模型。它描述了我们如何与数据库 [FOWLER] 中的数据交互。换句话说,它是您抽象数据模型的方式、您对实体进行分组的方式、您选择作为主键的属性等
  • 存储模型描述了数据库如何在内部存储和操作数据 [FOWLER]。尽管您无法直接控制这一点,但您当然可以通过了解数据库内部的工作方式来优化数据的检索或写入方式。
  • 关于amazon-dynamodb - 我是否应该始终使用哈希和范围主键类型创建我的 DynamoDB 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909585/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com