面试官:“谈谈分库分表吧?”

时间:2019-10-05 13:57:16   收藏:0   阅读:82
关注偶,领取更多学习资料哦。

技术分享图片

1.什么是分库分表

从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库上,将原本存储在一个表的数据分块存储在多个表里面。

数据的切分根据其切分规则的类型,可以分为如下两种切分模式。

这样操作的优点:

    拆分后业务清晰,拆分规则明确。

    系统之间进行整合或扩展很容易。

    按照成本、应用的等级、应用的类型等将表放到不同的机器上,便于管理。

    便于实现动静分离、冷热分离的数据库表的设计模式。

    数据维护简单。

缺点:

    业务表多样,SQL语句复杂。

2.为什么要用分库分表

数据库负载增大时的处理:随着我们的应用的用户量越来越大,访问量也随之提升,当他们提升到一定的量级之后,应用也就越来越慢。当然我们可以通过增大前端应用负载的方式来提升速度,但是直到有一天我们发现无论如何增大前端应用负载都不能提升速度,我们就逐步找到原因,是数据库的问题。因为数据库是存在性能瓶颈的,这是无法避免的。

3.市面上常用中间件

MyCat:是一个中间件的第三方应用,使用mycat时不需要改代码。
我们在使用的时候,如果有多个库,我们在代码里面就只要写mycat对外的一个逻辑库信息就行,而数据库层面的配置,比如总共有多少个库,每个库里面的表,每个表的分片规则,这些都是在mycat里面配置,不需要修改代码信息。
具体的逻辑图如下:

技术分享图片

Sharding JDBC:是一个jar包,使用sharding-jdbc时需要修改代码。
我们在使用的时候,需要引入sharding jdbc的jar包,在配置文件里面写明总共有多少个库,每个库里面的表,每个表的分片规则等信息。

具体的逻辑图如下:

技术分享图片

如何选择中间件?

sharding-jdbc和mycat使用不同的理念,sharding-jdbc目前是基于jdbc驱动,无需额外的proxy,因此也无需关注proxy本身的高可用。Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的。

其实MyCAT很适合中小企业使用的。可以非常容易的实现数据库的读写分离和分库分表,反而对于大企业来说,都会自己开发适合自己的数据库中间层应用,比如sharding jdbc原来就是当当网内部的数据库中间件,后来开源出来的。

原文:https://www.cnblogs.com/chenchen0618/p/11624480.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!