名词注释
- cobar:阿里巴巴初期使用的关系型数据库分布式处理系统。不支持跨库的查询;SET操作会被丢弃(处理事务和设置字符集除外);如果使用分库,inset必须带有分库字段,update不能更新分库字段、不支持SAVEPOINT(保存点)操作;使用JDBC时不支持批量提交(rewriteBatchedStatement=true);使用JDBC时不支持预编译(useServerPrepStmts=true);使用JDBC时不支持对二进制类型BLOB、BINARY、VARBINARAY字段使用setBlob()或者setBinaryStream()。
- TDDL:Taobao Distributed Data Layer,分布式数据层框架。它完全按照JDBC规范实现,实现调用方代码零入侵。分为三层:matrix分表分库逻辑层、group主备/读写分离层、atom连接层。
- 分表分库的事务边界:单个SQL在后端数据库上同时执行的数量。事务边界越大,锁冲突的概率就越大,而且因为无法通过扩展数据库数量来增大可用连接数。
- DRDS:分布式关系型数据库服务(Distributed Relational Database Service,简称 DRDS)是阿里巴巴致力于解决单机数据库服务瓶颈问题而自主研发推出的分布式数据库产品。DRDS 高度兼容 MySQL 协议和语法,支持自动化水平拆分、在线平滑扩缩容、弹性扩展、透明读写分离,具备数据库全生命周期运维管控能力。DRDS 前身为淘宝 TDDL,是近千核心应用首选组件。
概要
分库分表主要提升了数据库的线性扩展能力。数据库拆分时,要尽可能的平均拆分,防止单个热表出现,如果表数据分布不均匀,很容易造成大部分分片数据库/表负载良好,个别分片数据库/表热度过高阻塞业务。尽量减少事务边界。如果存在较多全表扫描情况,建议使用异构索引表,以空间换时间,降低全表扫描的概率。
当然,很有可能平均拆分与事务边界存在无法同时兼顾的情况,这种情况下,最好优先考虑平均拆分,因为大部分事务边界都可以使用异构索引表解决,而平均拆分的缺陷则会随着差异越大,解决起来越困难,甚至需要推翻重做。