场景假设
场景 1:有两个分布在不通实例上的多张不通的表,想要通过某个字段关联,做一个统计,或者想将分布在不同实例的表,合并到一个实例中来做一些查询。
场景 2:由于数据库容量的瓶颈或者是由于数据库访问性能的瓶颈,将一某一个大库、大表或者访问量非常大的表进行拆分,然后分布到不通的实例中。
简单来说就是水平、垂直拆分的场景
一、Spider 引擎简介
1、什么是 Spider 引擎
Spider 引擎是一个内置的支持数据分片特性的存储引擎,支持分区和 XA 事务,该引擎可以在服务器上建立和远程数据库表之间的链接,操作起来就像操作本地的表一样。并且对后台数据库的引擎没有任何限制。目前 spider 引擎已经集成到了 MariaDB 中。
2、Spider 架构图
3、Spider 的优劣对比
优势分析
1. 对业务完全透明,业务层不需要做任何的修改;对于分库和分表的操作业务层不需要关系,只需要通过 spider 作为代理入口,真实数据存储在哪台设备上,spider 代理会自动进行路由。2. 方便横向扩展,能解决单台 mysql 的性能和存储瓶颈 3
3. 对后端的数据库引擎没有限制
4. 实现垂直拆分和水平拆分功能,针对分表支持此哈希,范围,列表等算法
5. 完全兼容 mysql 协议
劣势分析
1.Spider 本身不支持缓存和全文搜索,只能在后端数据库实现全文搜索
2.Spider 无法备份数据,只能对后端数据库做物理备份
3.Spider 本身是单点的,无法做灾备,只能通过 VIP 方式自己实现啊
4. 由于业务与数据库之间多了一层 spider,在性能上多少会有些损耗
二、Spider 的使用场景解析
1、垂直分表的场景和解析
从上图可以看出,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 再转发给客户端
2、水平分表的场景和解析
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 再将结果转发给发起请求的客户端。
三、Spider 引擎实战
1、安装
从 spider 10.0.0.4 版本开始,spider 引擎就集成到了 MariaDB 中,集成后安装就非常的简单,安装步骤如下:1、安装 mariaDB 到 spider server 以及后端多台 DB server 上;安装方法非常简单,请参考:https://mariadb.com/kb/en/mariadb/getting-installing-and-upgrading-mariadb/
2、安装 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 引擎
2、使用
未完待续~~~