按关键词阅读:
将sql语法树转化为sql语句 。
4.2 分表分库
单库单表的问题:
几年前 , 业务简单 , 应用的数据比较少 , 表结构也不复杂 。 只有一个数据库 , 数据库中的表是一张完整的表 。 而到了今天 , 2007年了 , 业务复杂起来了 , 数据量爆增 , 单表数据破千万甚至上亿条 , 一条DML语句 , 死慢死慢的 。 这种情况下加索引已不再有显著的效果 。
这个时候 , 数据库效率瓶颈不是靠加索引 , sql优化能搞定的 。
正确出路:分表分库 , 通过将表拆分 , 来降低单表数据量 , 进而提高数据库操作效率 。
分表分为:
垂直分表
水平分表
分库分为:
垂直分库
水平分库
由于TDDL不参与业务 , 而垂直分库分表是强业务相关的 , 因此TDDL暂不参与垂直分库分表 , 只在水平分库分表方向上努力 。
4.2.1 垂直分表
垂直拆分是将一张表垂直拆成多个表 。 往往是把常用的列独立成一张主表 。 不常用的列以及特别长的列拆分成另一张拓展表 。
本文插图
简单垂直分表举例
核心要素:
冷热分离 , 把常用的列放在一个表 , 不常用的放在一个表 。
大字段列独立存放 , 如描述信息 。
关联关系的列紧密的放在一起 。
它带来的提升是:
为了避免IO争抢并减少锁表的几率 , 查看详情的用户与商品信息浏览互不影响 。
充分发挥热门数据的操作效率 , 商品信息的操作的高效率不会被商品描述的低效率所拖累 。
4.2.2 水平分表
水平分表是在同一个数据库内 , 把同一个表的数据按一定规则拆到多个表中 。
本文插图
简单水平分表举例
简单点的技巧:按照枚举类型区分 。
作用总结:
库内的水平分表 , 解决了单一表数据量过大的问题 , 分出来的小表中只包含一部分数据 , 从而使得单个表的数据量变小 , 提高检索性能 。
避免IO争抢并减少锁表的几率 。
4.2.3 垂直分库
垂直分库是指按照业务将表进行分类 , 分布到不同的数据库上面 , 每个库可以放在不同的服务器上 , 它的核心理念是专库专用 。
本文插图
垂直分库
作用总结:
解决业务层面的耦合 , 业务清晰 。
高并发场景下 , 垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈 。
能对不同业务的数据进行分级管理、维护、监控、扩展等 。
垂直分库通过将表按业务分类 , 然后分布在不同数据库 , 并且可以将这些数据库部署在不同服务器上 , 从而达到多个服务器共同分摊压力的效果 , 但是依然没有解决单表数据量过大的问题 。
4.2.4 水平分库(TDDL 核心)
水平分库是把同一个表的数据按一定规则拆到不同的数据库中 , 每个库可以放在不同的服务器上 。
本文插图
水平分库
作用总结:
解决了单库单表数据量过大的问题 , 理论上解决了高并发的性能瓶颈 。
水平分库核心要解决的问题:
如何知道数据在哪个库里?- 路由问题
结果合并
全局唯一主键ID
分布式事务(暂时不支持)
4.2.5 水平分库——问题解决
(1)自动路由算法
sql转发:在水平拆分后 , 数据被分散到多张表里 。 原来的一个sql需要拆解 , 进行转发路由 。
例:
稿源:(ZAKER汽车)
【】网址:http://www.shadafang.com/c/hn092Y452G2020.html
标题:大数据&云计算|作为数据库核心成员,如何让淘宝不卡顿?( 三 )