消防网站模板,wordpress时间,三门峡网站建设价格,成都展示型网页设计公司分库分表#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案#xff0c;所谓“分库分表”#xff0c;根本不是一回事#xff0c;而是三件事#xff0c;他们要解决的问题也都不一样。
这三个事分别是“只分库不分表”、“只分表不分库”、以…分库分表是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案所谓“分库分表”根本不是一回事而是三件事他们要解决的问题也都不一样。
这三个事分别是“只分库不分表”、“只分表不分库”、以及“既分库又分表”。
**分库主要解决的是并发量大的问题。**因为并发量一旦上来了那么数据库就可能成为瓶颈因为数据库的连接数是有限的虽然可以调整但是也不是无限调整的。所以当你的数据库的读或者写的QPS过高导致你的数据库连接数不足了的时候就需要分库分表了通过增加数据库实例的方式来提供更多的可用数据库链接从而提升系统的并发度。
**分表主要解决的是数据量大的问题。**假如你的单表数据量非常大因为并发不高数据量连接可能还够但是存储和查询的性能遇到瓶颈了你做了很多优化之后还是无法提升效率的时候就需要考虑分库分表了。
那么当你的数据库链接也不够了并且单表数据量也很大导致查询比较慢的时候就需要做既分库又分表了。
扩展知识
分库、分表、分库分表
**分库主要解决的是并发量大的问题。**比较典型的分库场景就是我们在做微服务拆分的时候就会按照业务边界把各个业务的数据从一个单一的数据库中拆分开分别把订单、物流、商品、会员等数据分别放到单独的数据库中。 还有就是有的时候可能会需要把历史订单挪到历史库里面去。这也是分库的一种具体做法。
什么时候分表
分表主要解决的是数据量大的问题。通过将数据拆分到多张表中来减少单表的数据量从而提升查询速度。 一般我们认为单表行数超过500万行或者单表容量超过2GB之后才需要考虑做分库分表了小于这个数据量遇到性能问题先建议大家通过其他优化来解决。
PS: 以上数据是阿里巴巴Java开发手册中给出的数据偏保守根据实际经验来说单表抗2000万的数据量问题不大但具体的数据里还要看记录大小、存储引擎设置、硬件配置等。
那如果既需要解决并发量大的问题又需要解决数据量大的问题时候。通常情况下高并发和数据量大的问题都是同时发生的所以我们会经常遇到分库分表需要同时进行的情况。
所以当你的数据库链接也不够了并且单表数据量也很大导致查询比较慢的时候就需要做既分库又分表了。
横向拆分和纵向拆分
谈及到分库分表那就要涉及到该如何做拆分的问题。
通常在做拆分的时候有两种分法分别是横向拆分(水平拆分)和纵向拆分(垂直拆分)。假如我们有一张表如果把这张表中某一条记录的多个字段拆分到多张表中这种就是纵向拆分。那如果把一张表中的不同的记录分别放到不同的表中这种就是横向拆分。
横向拆分的结果就是数据库表中的数据会分散到多张表中使得每一个单表中的数据的条数有所下降。比如我们可以把不同的用户的订单分表拆分放到不同的表中。 纵向拆分的结果是数据库表中的数据的字段数会变少使得每一个单表中的数据的存储有所下降。比如我可以把商品详情信息、价格信息、库存信息等等分别拆分到不同的表中。 还有我们谈到的针对不同的业务做拆分成多个数据库的这种情况其实也是纵向拆分的一种。
分库分表的工具
在选定了分表字段和分表算法之后那么如何把这些功能给实现出来需要怎么做呢
我们如何可以做到像处理单表一样处理分库分表的数据呢这就需要用到一个分库分表的工具了。
目前市面上比较不错的分库分表的开源框架主要有三个分别是sharding-jdbc、TDDL和Mycat
Sharding-JDBC
现在叫ShardingSphere(Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款相互独立的产品组成)。它定位为轻量级Java框架在Java的JDBC层提供的额外服务。它使用客户端直连数据库以jar包形式提供服务无需额外部署和依赖可理解为增强版的JDBC驱动完全兼容JDBC和各种ORM框架。
开源地址https://shardingsphere.apache.org
TDDL
TDDL是淘宝开源的一个用于访问数据库的中间件它集成了分库分表读写分离权重调配动态数据源配置等功能。封装jdbc的DataSource给用户提供统一的基于客户端的使用。
开源地址https://github.com/alibaba/tb_tddl
Mycat
Mycat是一款分布式关系型数据库中间件。它支持分布式SQL查询兼容MySQL通讯协议以Java生态支持多种后端数据库通过数据分片提高数据查询处理能力。
开源地址https://github.com/MyCATApache/Mycat2