分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分玦存储到多 个库上,把原本存储于一个表的数据分块存储到多个表上。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。
分表
就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。
分库
一旦分表,一个库中的表会越来越多
问题描述:
mysql单表经验
一般来说 MySQL 数据库单表记录最好控制在 500 万条(这是个经验数字)
分库分表目的:分担单台设备负载
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。
分库分表的基本思想:对数据切分,分而治之
将不同的表(或者 Schema)拆分到不同的数据库(主机)之上,垂直划分数据库是横据业务进行划分,例如将shop中涉及商品、订单、用户的表分别划分出成商品库、订单库、用户库,通过降低单库(表)的大小来提高性能,但这种方式并没有解决高数据量带来的性能提耗(并没有减少表的数据量)
分表的情况就是将一个大表根据业务功能拆分成一个个子表。常见是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联。
表垂直拆分是对列的拆分,拆分完成后每张单表相对于原表row 不变,column减少(可以理解A4纸左右对折切割)
根据表中的数据的逻辑关系,将同一张表中的数据按照某种条件拆分到多台数据库(主机)上。水平划分是根据一定规则,例如时间或者id序列值等进行数据的拆分。相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表包含一部分数据。
水平切分是对数据行的切分,拆分完成后每张单表相对于原表column不变,row减少(可以理解A4纸上下对折切割)
1. Atlas
https://github.com/Qihoo360/Atlas
Atas是由 Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目,它是在mysql- proxy0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与 MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低 MySQL负担,它还维护了连接池。
Atlas 相当于nginx 代理服务器,业务后端连接Atlas 服务器,将sql 发送给Arlas 服务器,Atlas 会负责返回拼接数据
2. Cobar
https://github.com/alibaba/cobar
阿里巴巴(B2B)部门开发的一种关系型数据库的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。
3. Sharding JDBC
https://shardingsphere.apache.org
当当应用框架 ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数 据库分库分表访问。
4. TDDL
https://github.com/alibaba/tb_tddl
淘宝根据自己的业务特点开发了TDDL框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的jdbc datasource实现,具有主备,读写分离,动态数据库配置等能。
5 Mycat
http://www.mycat.io/
一个开源的分布式数据库系统,实现了 MySQL协议的服务器。前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命令行访问,而其后端可以用 MySQL原生协议与多个 MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/womenyiqilalala/article/details/105579497
内容来源于网络,如有侵权,请联系作者删除!