SQL如今流行单表设计
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.
SQL如今流行单表设计
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 还提供了两种类型的索引:
Recommend
-
45
单表简单查询 前几天记了下创建、删除、修改数据库,表啊之类的学习笔记,今天终于要开始查询了,查询数据嘛~在我心里反正挺难的,毕竟SQL不好写,脑袋笨啊。 首先呢,Mysql官方提供了一个数据库实例给我们用,那~就是大名...
-
56
程序员 - @qianji201712 - 想向大家请教一个问题:个人项目,之前用阿里云服务器,不过数据库是自建的 MySQL,一直是单服务器单表存储,备份是每天 dump 一次然后备份到云盘。目前用户注册量上来后,每天差不多
-
56
今天,探讨一个有趣的话题: MySQL 单表数据达到多少时才需要考虑分库分表? 有人说 2000 万行,也有人说 500 万行。 那么,你觉得这个数值多少才合适呢?
-
50
MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律? 发表于
-
33
数据库 - @FONG2 - 以前设计是以请求编号为主键的,现在优化后以用户编号为主键,那么就存在大量重复数据了。现在用 sql 查一下都得等半天,请问有啥好方法处理么
-
12
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习 1 文章概述 在业务发展初期单...
-
3
没有几个单表查询的情况下,有必要使用mybaties plus吗魔力猫 26分钟前 ...
-
3
mysql性能优化:单表1400w查询最后十条数据(耗时0.036s)
-
3
互联网大厂都是单表查询的吗?表设计都尽量没有外键的吗?
-
3
SQL学习--单表查询 Apr 14, 2008 指定列:select Sno,Sname from Student; 查询经过计算的值:select Sname, 'year of birth:', 2008-Sage, Sdept from student; 去...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK