SQL反模式学习笔记9 元数据分裂
目标:支持可扩展性。优化数据库的结构来提升查询的性能以及支持表的平滑扩展。
反模式:克隆表与克隆列
1、将一张很长的表拆分成多张较小的表,使用表中某一个特定的数据字段来给这些拆分出来的表命名。
2、将一个列拆分成多个之列,使用别的列中的不同值给拆分出来的列命名。
为了达到减少每张表记录数的目的,你不得不创建一些有很多列的表,或者创建很多很多表。但是在2个方案中,
你会发现随着数据量的增长,会有越来越多的表或者列。
缺点:(1)不断产生新的表。要将数据拆分到不同的表中,需要一个规则来定义哪些数据属于哪些表。
(2)管理数据完整性(不同的表定义不同的约束)。
(3)同步数据时,需要多个操作步骤。
(4)确保唯一性:需要确保所有被分隔出来的表中的主键都是唯一的。如果你需要从一张表中移动一条记录到令一张表中,
需要保证被移动记录的主键值不会和目标表中的主键记录冲突。
(主键如果是自增长的Int类型,则很难保证Id一致;如果是Guid类型,则容易控制)。
(5)跨表查询:时间时间的增长,创建了越来越多的表,就需要不断的更新程序代码来引入这些新创建的表。
(6)同步元数据:如果将表进行了拆分,当新增加一个列的数据,需要再所有的表中增加这个新的列。
(7)管理引用完整性:分隔表及时作为一张关联表而不是父表,也可能引起一些问题。
(8)标识元数据分裂列:列也可能根据元数据分类。可以创建一个含有很多列的表,这些列安装他们的类别扩展。
如何识别反模式:当出现以下情况时,可能是反模式
1、我们需要每……创建一张表或者列?
2、数据库支持的最大数量的表或者列是多少?
3、发现程序添加记录失败了:因为王佳伟新的一年添加新表了
4、如何查询很多张表?每张表的列都是一样的。
【如果你需要查询很多结构一样的表,就应该讲数据全部存储在一个表中,使用一个额外的属性列来分组数据】
5、如何将表名称作为一个表里传递?在查询是需要根据辩分动态的生成这些表名称。
合理使用反模式:
手动分隔表的一个合理使用场景是“归档数据”-----将历史数据从日常使用的数据库中移除。
通常在过期数据的查询变的非常稀少的情况下,才会进行如此的操作。
如果你没有时间同时查询当前数据和历史数据的需求,将老数据从当前活动的表转移到其他地方是很合适的操作。
将数据归档到与当前表结构相兼容的新表中,既能支持偶尔做数据分析时的查询,同时能让日常数据查询边的非常高效。
【 备份并回复一个中等规模的数据库比操作一个存储着TB级数据的数据库要方便得多。
尽管将数据对象模型化并将整个对象中的所有东西映射到一个单独的数据库中的做法没有错,但是合理地将大小超过
临界值的数据库拆分开能简化数据库管理的工作。
】
解决方案:分区并标准化
当一张表的数据量变的非常巨大是,除了手动拆分这张表,可以使用水平分区、垂直分区以及使用关联表来提升查询性能。
1、水平分区(或者叫分片):根据数据行来对表进行拆分。同时不用担心那些分隔表所带来的缺陷。
仅需要定义一些规则来拆分一张逻辑表,数据库会为你管理余下所有的工作。
物理上来说,表的确的被拆分了,但你依旧可以向查询单一表那样执行SQL查询语句。
2、垂直分区:当某些列非常庞大或者很少使用的时候,对表进行按列拆分会比较有优势。
Blob类型与Text类型的列大小是可变的,可能非常大。为了提高存储于查询性能,这些数据库会自动地将
这些类型的列和表中的其他列分开进行存储。如果进行一个不包含Blob类型与Text类型的查询,就可以
更高效的获取其他的列,查询性能有所提高。
3、解决元数据分裂列:创建关联表
结论:别让数据繁衍元数据。
SQL反模式,系列学习汇总
18、SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
SQL反模式学习笔记9 元数据分裂的更多相关文章
- SQL反模式学习笔记1 开篇
什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...
- SQL反模式学习笔记5 外键约束【不用钥匙的入口】
目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...
- SQL反模式学习笔记3 单纯的树
2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...
- SQL反模式学习笔记2 乱穿马路
程序员通常使用逗号分隔的列表来避免在多对多的关系中创建交叉表, 将这种设计方式定义为一种反模式,称为“乱穿马路”. 目标: 存储多属性值,即多对一 反模式:将多个值以格式化的逗号分隔存储在一个字段中 ...
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- SQL反模式学习笔记7 多态关联
目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...
- SQL反模式学习笔记8 多列属性
目标:存储多值属性 反模式:创建多个列.比如一个人具有多个电话号码.座机号码.手机号码等. 1.查询:多个列的话,查询时可能不得不用IN,或者多个OR: 2.添加.删除时确保唯一性.判断是否有值:这些 ...
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
随机推荐
- Bugku 杂项 啊哒
有趣的表情包来源:第七届山东省大学生网络安全技能大赛 下载下来安装包后可以得到一张图片,010发现jpg后面还夹带着一些东西,用binwalk提取后得到一个压缩包,但是需要密码. 我卡在这里了,尝试了 ...
- mongoDB 其他数据类型
时间 类型 获取当前时间 new Date() 自动生成当前时间(国际标准时间) db.class.insertOne({book:"数学",date:new Date()}) D ...
- A Reliability-Aware Network Service Chain Provisioning With Delay Guarantees in NFV-Enabled Enterprise Datacenter Networks
文章名称:A Reliability-Aware Network Service Chain Provisioning With Delay Guarantees in NFV-Enabled Ent ...
- MySQL_表锁_lock tables tableName read
pre.环境准备 1.建立两个表S,T,并插入一些数据 --创建表S create table S(d int) engine=innodb; ); --创建表T create table T(c i ...
- MySQL5.7.23解压版安装教程
每次找安装教程太麻烦,因此给自己备份一下步骤,方便以后查看.解压版下载地址https://dev.mysql.com/downloads/mysql/,详细图解如下: 1.根据自己需求,选择适合自己的 ...
- CMDB资产管理系统开发【day26】:linux客户端开发
客户端疑难点及获取流程 1.linux客户端支持2就可以,python3就是很麻烦 难道你要求所有的客户端都上pytho3吗? 现在从bin的入口进去 HouseStark.ArgvHandler(s ...
- Matlab怎么修改显示数值格式/精度/小数位数
参考:https://jingyan.baidu.com/article/7f41ecec1ad029593c095c70.html
- C++回顾day03---<异常>
一:传统错误处理机制(C中通过函数返回来处理) int CalcRes(int n, int m, char ch, int& res) { ; switch (ch) { case '+': ...
- Centos7安装vsftpd (FTP服务器)
Centos7安装vsftpd (FTP服务器) 原文链接:https://www.jianshu.com/p/9abad055fff6 TyiMan 关注 2016.02.06 21:19* 字数 ...
- Gram 矩阵与向量到子空间的距离
设 $W$ 是 $n$ 维 Euclidean 空间 $V$ 的子空间, $\beta\in V$, 定义 $\beta$ 到 $W$ 的距离 $$\bex \rd (\beta,W)=|\bet ...