Amazon DynamoDB 的数据建模核心概念

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 具有 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 经验的开发人员可以加入本论坛,学习 Dynamo DB 数据建模的核心概念。探索 DynamoDB 客户为需要任何规模的一致、快速性能的应用程序使用的通用访问模式的最佳实践。学习在决定单表和多表设计、索引策略等时要进行的最佳实践和权衡。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1000字,阅读时间大约是5分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 由资深DynamoDB专家和高工程师Greg Crum和Aksha Vig领导的团队开始着手研究。他们强调了DynamoDB的主要优点,如默认的无缝可扩展性、在不需完全重新设计的前提下支持未来发展需求以及复杂的数据关系建模能力。他们的目标是为优化和可扩展模式设计提供指导。 Crum解释了在设计模式时需要考虑的关键因素,包括了解主要实体、应用程序如何访问这些实体、它们的近似大小以及吞吐量需求。掌握了这些信息,便可设计出最佳模式。 他强调了DynamoDB的核心概念:作为一个完全管理的NoSQL数据库服务,无需服务器或集群;数据被组织成包含项目的表格;项目必须有唯一的分区键来确定数据存储位置以实现快速查找;项目可以具有排序键用于在分区中组织数据;除了分区键和排序键外,项目还具有灵活的架构。 Crum还强调了全局次要索引的重要性,它可以作为替代的分区和排序键,允许对相同数据采用不同的访问模式。例如,一个客户ID分区键表可以有订单ID分区键索引,用于查询客户的订单。 对于电子商务用例,Crum确定了客户、产品、购物车和服务订单作为核心实体。典型的访问模式是客户将物品添加到购物车、下订单和检查订单状态。 Crum建议在初始阶段,可以在单独的表中建模实体,这对于有经验的关系数据库用户来说更容易理解,因为表与实体非常接近。好处包括可以根据每个表定制索引、存储类和备份策略。缺点是在应用程序中重新构造跨表的实体关系可能较为困难。 另一种选择是使用单个表存储所有实体类型,使用主实体(客户ID)的分区键和区分类型的排序键。这提供了查询相关项目时的局部性,平滑了吞吐量峰值,并减小了项目大小。 目前,Crum选择了分开的客户、产品、购物车和订单表。 在讨论如何选择合适的高基数分区键以实现数据均匀分布以避免“热点”分区时,他表示,对于客户(Customer)而言,电子邮件和姓氏可能不是理想的选择,因为它们可能存在较低的唯一性。他强调,随机生成的UUID可以作为更好的客户ID分区键,具有极高的基数。 添加排序键的方法可以将相关项分组到分区键下,从而减少读取的数据量以提高查询性能。例如,可以使用顾客ID作为分区键,同时存储每个顾客的多个订单的订单ID作为排序键。此外,还可以通过在前缀中使用诸如"#status"这样的层次结构来构建排序键,从而允许仅查询特定类型的项,如活动的购物车项。这种设计还易于在同一分区键下添加新的项类型,如收藏夹项。 初始模式设计通常包括独立的客户、产品、购物车和订单表。客户和产品可以采用简单的分区键,而购物车和订单则可以通过应用分区和排序模式来实现更高效的处理。 Aksha讨论了优化和成本管理方面的问题。她指出,写容量单位(WCU)是根据项目大小进行计算的,1-1024字节相当于1个WCU。较大的项目会导致更高的写入成本。权衡因素包括更高的延迟、更多的限流风险以及无限制的增长。 为了说明这个问题,Aksha提供了一个订单文档的例子,随着订单状态更改,该文档可能会增长。更新一个20字节的状态字段需要支付重新编写整个20KB项目的全部成本。她建议采用垂直分区——将项目拆分为较小的逻辑块,从而减少更新的WCU并提高性能。然而,这种方法也可能带来更高的初始写入成本和从部分重建完整项目的可能性。但对于高流量项目来说,这些优化是值得的。 Aksha还介绍了数据过滤技术,包括三种主要方法:分区和排序键(最有效,但需要规划)、辅助索引(为不同的访问模式提供优化的替代视图)和筛选表达式(最低效,因为它们需要扫描整个表)。她还解释了全局次要索引会复制数据并有选择地投影属性,从而降低成本、加快查询速度并提高可扩展性。然而,这种方法也存在一些缺点,如更高的开销、争用风险、滞后的一致性和索引维护问题。 针对数据模型优化,需根据访问需求平衡单表与多表设计,并选择合适的分区键以均匀分布数据。此外,可通过分区化和压缩来优化成本,同时利用索引提高性能和可扩展性。通过键和索引的高效筛选数据,可以将项目大小从20KB优化至500字节。为了继续深入学习DynamoDB的数据建模,他还提供了额外的学习资源。 总的来说,他们通过合理建立实体、选择和访问模式一致的分区和排序键以及使用二级索引,展示了如何为电子商务应用设计出既优化又可扩展的模式。例如,一个电子商务客户希望将其产品加入购物车并保存以备后用;而另一位客户希望为其购物车中的活动商品创建订单,同时忽略已保存的商品。在购买后,客户可以查看其最近订单的状态,以及哪些产品已经发货或尚未发货。公司还可以查看未履行订单,以确定仍需发货的物品。在物品发出后,订单状态应更新为已发货。此外,客户对于查看订单历史记录和状态的优先级较高的读取需求也需要优化。公司可能还需要针对不同优化的低优先级历史订单报告工作负载。通过这些策略,DynamoDB能够为这些不同的客户用例提供可扩展的优化性能。 **下面是一些演讲现场的精彩瞬间:** 亚马逊云科技旗下的DynamoDB以其灵活的数据建模能力实现了无缝扩展,以满足未来的需求,而不需要进行全面性的重新设计。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_0.png) 在本次数据建模演讲中,演讲者将探讨关键议题,包括但不限于DynamoDB的基本原理、虚构的使用案例、表设计的选择、模式构建的模块以及构建可扩展模式所需的技巧。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_1.png) 演讲者还将解释基数问题的概念,即数据集中唯一项目的数量,以及它与电子商务商店中的产品、客户等实体之间的关系。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_2.png) 此外,演讲者还将讨论一些重要的数据库设计考量,例如工作负载的优先级、访问控制的实施以及对下游服务的影响。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_3.png) 一个有趣的实例是展示了如何在DynamoDB中利用全局次要索引来寻找尚未收费的客户。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_4.png) 演讲者强调在DynamoDB中设计高基数模式以防止抑制并提高性能的重要性。 ![](https://d1trpeugzwbig5.cloudfront.net/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB/images/rebranded/DAT329-Data_modeling_core_concepts_for_Amazon_DynamoDB_5.png) ## 总结 这段演讲主要探讨了[Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail)的核心数据建模概念,作为一个完全托管的非关系型数据库服务。演讲者通过介绍表、项、属性和主键等关键概念来帮助听众理解DynamoDB。他们还通过一个电子商务案例研究来说明模式设计的选择。在考虑了单表和多表方法后,他们决定将每个实体放在单独的表中。接着,他们深入研究了架构构建模块。例如,客户ID可以用作分区键,以便在多个分区中分布数据。排序键则有助于对相关的项目进行分组,并在分区中进行查询。具有前缀的复合排序键支持层次结构和新功能。此外,还有其他技巧可以优化成本和性能,如垂直分区将大型项目分割成较小的部分以减少所需的容量单位。全局次要索引提供了替代访问模式和工作负载隔离。稀疏索引则有选择地在索引表中投影属性。总的来说,选择合适的键以适应不同的访问模式以及避免热分区的出现,控制项目的大小以限制容量单位的消耗,并通过添加索引来实现特定查询工作负载都是扩展DynamoDB应用程序的关键。高效的架构设计对于扩展DynamoDB应用程序至关重要。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭