数据库可以用来存储大量的数据,但是如果当数据超过一个量级时,比如2T,那么再往同一个服务器的数据库写入数据就会发生磁盘不足的情况,如果只无脑增加磁盘,那么系统性能也会有所下降。
在新版mariadb中,可以进行数据分表,就是将一个2T大小的数据,平摊到两个服务器中,每个服务器单独处理1T的数据,这样就会快许多。

这里举个例子:

这个技术通过spider引擎实现,该引擎默认未安装,需要手动安装。

spider基础架构:
mariadb spider架构
其中SPIDER作为主服务器,不存储内容,只负责接收请求,并下发,使用专有引擎spider。通过一些简单的
BACKEND作为后端服务器,用于记录数据,使用默认引擎即可,例如InnoDB

使用spider

安装sipder引擎

在使用之前,需要在SPIDER主机上安装sipder引擎,这里的安装方法需要手动导入。

SOURCE /usr/share/mariadb/install_spider.sql;

创建表格

首先需要在两个BACNEND主机上创建普通用户,用于数据查询、写入

grant all on testing.* to 'spider'@'10.0.0.%' identified by '123456';

然后在SPIDER主机上添加两台BACNEND主机的用户信息

create server backend1 foreign data wrapper mariadb options(host '10.0.0.101', database 'testing', user 'spider', password '123456', port 3306);
create server backend2 foreign data wrapper mariadb options(host '10.0.0.102', database 'testing', user 'spider', password '123456', port 3306);
# 通过表格来查询命令是否执行成功
select * from mysql.servers;

再接着在两台BACKEND主机上创建表格:

create table sbtest ( ID int not null primary key auto_increment, name varchar(5))engine=innodb charset=utf8;

最后就是在SPIDER创建表格了:

create table sbtest(id int not null auto_increment primary key, name varchar(5))engine=spider charset='utf8' comment='wrapper "mysql", table "sbtest"' partition by key (id)(partition pt1 comment = 'srv "backend1"', partition pt2 comment = 'srv "backend2"');
# 在这插入几条数据用于测试
insert into sbtest (name) value('张三');
insert into sbtest (name) value('李四');
insert into sbtest (name) value('王五');
insert into sbtest (name) value('赵六');

spider 默认平均分配数据到BACKEND主机中,因为使用InnoDB引擎,所以可以直接到BACKEND主机上去查询数据:
BACKEND1
BACKEND1
BACKEND2
BACKEND2
SPIDER
SPIDER

需要注意:使用spider引擎创建的表不支持缓存,所以每次查询,spider都将重新到BACKEND主机去读取,可以使用中间件来进行数据缓存。
还有就是单节点的spider并不靠谱,应该同时设置多个spider节点并且配合haproxy以提高高可用能力。

本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【5HXL75GS】获取授权信息。

最后修改:2020 年 08 月 20 日 04 : 26 PM
如果觉得我的文章对你有用,请随意赞赏