Spider引擎(解决分库分表的尴尬)

场景假设

场景1:有两个分布在不通实例上的多张不通的表,想要经过某个字段关联,作一个统计,或者想将分布在不一样实例的表,合并到一个实例中来作一些查询。mysql

场景2:因为数据库容量的瓶颈或者是因为数据库访问性能的瓶颈,将一某一个大库、大表或者访问量很是大的表进行拆分,而后分布到不通的实例中。算法

简单来讲就是水平、垂直拆分的场景sql

1、Spider引擎简介

一、什么是Spider引擎

Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎能够在服务器上创建和远程数据库表之间的连接,操做起来就像操做本地的表同样。而且对后台数据库的引擎没有任何限制。
目前spider引擎已经集成到了MariaDB中。

二、Spider架构图

clipboard.png

三、Spider的优劣对比

优点分析
1.对业务彻底透明,业务层不须要作任何的修改;对于分库和分表的操做业务层不须要关系,只须要经过spider做为代理入口,真实数据存储在哪台设备上,spider代理会自动进行路由。
2.方便横向扩展,能解决单台mysql的性能和存储瓶颈3
3.对后端的数据库引擎没有限制
4.实现垂直拆分和水平拆分功能,针对分表支持此哈希,范围,列表等算法
5.彻底兼容mysql协议

劣势分析
1.Spider自己不支持缓存和全文搜索,只能在后端数据库实现全文搜索
2.Spider没法备份数据,只能对后端数据库作物理备份
3.Spider自己是单点的,没法作灾备,只能经过VIP方式本身实现啊
4.因为业务与数据库之间多了一层spider,在性能上多少会有些损耗

2、Spider的使用场景解析

一、垂直分表的场景和解析

clipboard.png

从上图能够看出,spider后面接4台DB server,能够将不通功能的表分布到后端不通的DB server中,好比user_info的表专门存放在HostA中,user_msg表存放在了HostB中,user_detail表存放在了HostC中,user_log表存放在了HostD中。在图中的红色部分,当咱们执行红色部分的SQL的时候,spider会经过user_info表的映射关系以及HostA的IP映射关系,将查询user_info表的请求都转发到HostA上,HostA查询完成后再将结果发给spider服务器,spider再转发给客户端

二、水平分表的场景和解析

clipboard.png

spider支持多种水平分表的模式,目前支持hash分表(hash)、范围分表(range)、列表分表(list),我这里用range来讲明水平分表的工做原理。从上图中能够看出spider对user_info表针对id进行了分区,将0~100000的记录存储在了HostA,100000~200000的记录存储在了HostB,200000~300000的记录存储在了HostC,300000~400000的记录存储在了HostD。当用户访问user_info的某条或者多条记录的时候,spider会根据分区的状况,对相关的记录落在某台或者多台DB server上,再进行转发。好比select * from user_info where id=1这个SQL,spider在收到这个请求后,会跟进分区状况选择对应的DB server进行转发。这里会将该请求转发到HostA中。HostA处理完成后,再将结果返回给spider server,spider再将结果转发给发起请求的客户端。

3、Spider引擎实战

一、安装

从spider 10.0.0.4版本开始,spider引擎就集成到了MariaDB中,集成后安装就很是的简单,安装步骤以下:

一、安装mariaDB到spider server以及后端多台DB server上;

    安装方法很是简单,请参考:https://mariadb.com/kb/en/mariadb/getting-installing-and-upgrading-mariadb/

二、安装spider引擎到spider server上(后端的DB server不须要安装spider引擎)

    mysql -uroot -p < install_spider.sql
    
    或者登陆mysql后执行
    
    source /path/install_spider.sql
    
    备注:install_spider.sql在share目录下面
    
    这个命令所作的事情以下:
    
    建立spider相关的系统表
    
    spider_link_failed_log
    
    spider_link_mon_servers
    
    spider_tables
    
    spider_xa
    
    spider_xa_failed_log
    
    spider_xa_member
    
    建立spider相关的表结构
    
    加载spider引擎

二、使用

未完待续~~~
相关文章
相关标签/搜索