🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 稍微上点规模的面向公众的应用,很容易,就到了单机传统数据库的性能瓶颈;因此,需要通过一些技术手段,来优化数据库的设计; 分库分表,是常见的解决方案; > 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。 > 分库分表包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式。 > 水平,就是针对行的处理方式,拆出来的表结构是一样的,垂直,是针对列的处理方式,拆出来的是不同的表结构; ## 二、垂直分表 将一个表按照字段分成多表,每个表存储其中一部分字段;实际上,就是把一张表,拆分成通过主键关联的N张表,每个表存储其中的一部分字段; 通常我们按以下原则进行垂直拆分: 1. 把不常用的字段单独放在一张表; 2. 把text,blob等大字段拆分出来放在附表中; 3. 经常组合查询的列放在一张表中; ## 三、垂直分库 垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用。 通过垂直分表性能得到了一定程度的提升,但是还没有达到要求,并且磁盘空间也快不够了,因为数据还是始终限制在一台服务器,库内垂直分表只解决了单一表数据量过大的问题,但没有将表分布到不同的服务器上,因此每个表还是竞争同一个物理机的CPU、内存、网络IO、磁盘。 ## 四、水平分表 水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。 举例来说,如果单表数据量过大,可以把ID为奇数的放到一张表,ID为偶数的放到另外一张表,这个就是典型的水平分表; ## 五、水平分库 水平分库是把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上; ## 六、 Sharding-JDBC技术实现 ShardingJdbc是一款分库分表组件,它定位为轻量级数据库驱动,以jar包形式提供服务,无需额外部署和其他依赖。对于业务系统的开发人员与数据库运维人员无需改变原有的开发与运维方式。 ShardingJdbc即为增强版的JDBC驱动,其优势在于无需对原有的业务工程进行任何改造的基础上,即可使其拥有分库分表的能力,成本较低,易于上手。但是,也有缺点,中间件与业务应用工程绑定在一起,对应用本身有侵入。并且目前只支持Java语言,问题难以追踪。 ![](https://img.kancloud.cn/72/d2/72d2f506bb59a45beef7b78e778c551a_557x358.png) ### 几个概念 ## 逻辑表 ## 真实表 ## 数据节点 ## 绑定表 ## 分片键