2

SQL如今流行单表设计

 1 year ago
source link: https://www.jdon.com/64400.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SQL如今流行单表设计

23-01-09 banq
SQL:使用复合键实现快速主从连接Join
2000年的开发者们:不要使用SQL,使用ORM。
2005年的ORMs:不要使用复合键
2010年的NoSQL:SQL连接Joins不能扩展
2015年的DynamoDB :单表设计

你知道这个单表设计是什么吗?
复合键!

Amazon DynamoDB是一种高性能的 NoSQL 数据库,可为许多无服务器应用程序提供数据存储。与传统的 SQL 数据库不同,它不使用表连接和其他关系数据库结构。但是,您可以在单个 DynamoDB 表中对许多常见的关系设计进行建模,但使用 NoSQL 方法时该过程有所不同。

这篇博文使用Alleycat 赛车应用程序来解释单表 DynamoDB 表的好处。它还展示了如何处理 DynamoDB 表中的建模数据访问要求。Alleycat 是一种家庭健身系统,允许用户参加一系列激烈的 5 分钟虚拟自行车比赛。一次最多 1,000 名赛车手骑上马鞍,突破节奏和阻力的极限,以创造个人记录并在虚拟排行榜上排名。

在 Alleycat 示例中,应用程序提供了许多练习课程。每个班级都有多个种族,每个种族都有多个赛车手。系统记录每个赛车手在比赛中每秒的输出。
在关系数据库中,通常每个表都有一个与另一个表中的外键相关的键。通过连接多个表,您可以查询相关表并在单个表视图中返回结果。虽然这很灵活方便,但计算量大且难以水平扩展。

许多无服务器架构都是为扩展而构建的,而关系数据库范式通常无法像工作负载需求那样有效地扩展。DynamoDB 几乎可以扩展到任何级别的流量,但权衡之一是缺少连接Join。
幸运的是,它提供了其他方法来对数据进行建模以满足 Alleycat 的要求。

在每个表中,您必须有一个分区键,它是一个字符串、数字或二进制值。此键是一个散列值,用于在恒定时间内定位项目,而不管表大小。它在概念上不同于基于 SQL 的数据库中的 ID 或主键字段,并且与其他表中的数据无关。当只有一个分区键时,这些值在表中的项目之间必须是唯一的。

(事实上,Hibernate已经将类似NaturalId用于表达实体的自然key)

每个表都可以选择有一个排序键。这使您可以在与给定主键匹配的项目中进行搜索和排序。虽然您必须在分区键中搜索精确的单个值,但您可以在排序键上进行模式搜索。通常使用带有时间戳的数字排序键来查找日期范围内的项目,或使用字符串搜索运算符来查找层次关系中的数据。

只有分区键和排序键,这限制了可能的查询类型,而不会在表中复制数据。为了解决这个问题,DynamoDB 还提供了两种类型的索引:

  • 本地二级索引(LSI):这些必须在创建表的同时创建,并有效地启用使用相同分区键的另一个排序键。
  • 全局二级索引(GSI):随时创建和删除这些索引,并可选择使用与现有表不同的分区键。
详细点击标题

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK