学习笔记--数据库分库分表简介

  • 一、什么时候该做分库分表操作?

1、当单表数据量达到千万级需要做水平分表操作。

因为MySQL的InnoDB引擎使用的是B+Tree数据结构存储索引,当数据量达到千万级别,该数据结构中树的层级将超过三层,会非常影响索引的执行效率。

2、当数据库的吞吐量达到了瓶颈时,就需要增加数据库实例,对数据库进行拆分,缓解系统压力。

 

  • 二、如何做数据库分库分表?

1、水平拆分

根据分片算法,保留原有数据表或数据库结构,拆分为多个数据表或数据库。

2、垂直拆分

根据业务维度,对原有数据表或数据库的结构,进行拆分为多个数据表或数据库。

 

  • 三、数据库分库分表的解决方案有哪些?

1、客户端分片

a)、直接在应用层实现分片逻辑和分片规则,需要在同一个应用的多个节点间进行同步,每个应用层都嵌入一个操作切片的逻辑实现,一般打包成一个jar包提供应用层使用。

b)、实现方式

b1)、在应用层直接实现

直接将分片逻辑和分片规则封装成一个jar。

优点:比较简单、适合快速上线;缺点:业务入侵。

b2)、定制JDBC协议实现

针对业务层提供与JDBC一致的接口,对业务透明(开发人员不用关心实现逻辑),分库分表操作在JDBC内部实现。

优点:不入侵业务,缺点:需要对JDBC协议熟悉。

流行的客户端分库分表框架Sharding JDBC(http://shardingjdbc.io/),就是采用该方式实现。

b3)、定制ORM框架实现

把分片规则实现到ORM框架中,或者通过ORM框架支持的扩展机制完成分片逻辑。

例如:通过在Mybatis的SQL配置文件中增加索引的参数来实现分片,如下代码:

<select id="getOrder" parameterType="java.util.Map" resultType="Order">
  select orderId,price from ORDER_#{index} where orderId = #{orderId}
</select>

 

2、代理分片

在应用层和数据库层之间增加一个代理层,把分片的路由规则配置在代理层对外提供与JDBC兼容的接口给应用层调用。开发人员不用关心分片规则,只需在代理层配置路由规则即可用。

优点:开发人员只需关心业务逻辑,分片逻辑留给代理层执行;缺点:增加了代理层相对应增加了一层网络传输,对性能会有影响,同时也增加了资源开销,另外需要对代理层进行维护。

通过代理分片实现的框架有:Cobar和Mycat。

 

3、支持事务的分布式数据库

将分布式事务的实现包装到数据库内部实现,对使用者透明,使用者像使用传统数据库(如Mysql)一样来调用即可。

提供分布式事务支持的产品有OceanBase、TiDB。

分布式数据库比较适合实现非交易系统,例如:大数据日志系统、统计系统、查询系统、社交网站等。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读