数据拆分实现数据库能力线性扩展
本章主要介绍淘宝的数据库和表的一些设计原则和实践经验,大部分都是业内比较通用的做法
数据库分库分表实践
-
阿里巴巴分布式数据层平台发展和演变,现有数据层中间件TDDL(Taobao Distributed Data Layer)的优点
数据库主备和动态切换
带权重的读写分离
单线程读重试
集中式数据源信息管理和动态变更
支持mysql和oracle数据库
基于JDBC规范,很容易扩展支持实现JDBC规范的数据源
无server、client-jar形式存在,应用直连数据库
读写次数,并发度流程控制,动态变更
可分析的日志打印,日志流控,动态变更
数据尽可能平均拆分,电商平台最核心的订单数据,以订单ID来分表还是以买家ID来分表?
-
尽量减少事务边界(事务边界指单个SQL语句在后端数据库上同时执行在数量)
事务边界的数量越大,给系统带来以下弊端
系统的锁冲突概率越高
系统越难以扩展
整体性能越低
-
异构索引表尽量降低全表扫描频率
上面的订单分表策略,淘宝使用订单ID分表,同时通过异构索引表解决卖家和买家维度的查询需求,同时,索引表只存储索引数据,避免数据冗余,查询到订单ID后再批量查询订单详细信息
通过精卫平台实现异构索引表的数据同步,核心功能如下
多线程管道实现
数据的安全
友好的用户自服务接入体验
平台管控和统计
将多条件频繁查询引入搜索引擎平台
-
简单就是美
如果在数据平均拆分和减小事物边界原则有冲突,则尽量优先满足数据平均拆分原则