数据分片

本文详细介绍了数据分片的目的,包括分布均匀和负载均衡,以及数据库的水平和垂直分割方式。重点讨论了Mycat作为分布式数据库中间件的角色,其分片规则如枚举法、求模法等,并阐述了Mycat的工作原理和分片案例,包括配置文件的使用和分片规则的实际应用。
摘要由CSDN通过智能技术生成

数据分片

数据分片的目的

在分布式存储系统中,数据需要分散存储在多台设备上,数据分片就是用来确定数据在多台存储设备上分布的技术

  • 分布均匀: 即每台设备上的数据量要尽可能相近
  • 负载均衡:即每台设备上的请求量要尽可能相近
  • 扩缩容时产生的数据迁移尽可能少

数据库分割方式

  • 水平分割 (横向切分)
    • 按照表中指定字段的分片规则,将表记录按行切分,分散存储到多个数据库中
  • 垂直分割(纵向切分)
    • 将单个数据库的多个表按业务类型分类,分散存储到不同的数据库 不是切割表字段

mycat

mycat概述

mycat是基于Java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案

  • 适合数据大量写入的存储需求
  • 支持Mysql、Oracle、Sqlserver、Mongdb等
  • 提供数据读写分离服务
  • 提供数据切片服务
  • 基于Cobar进行研发的开源软件

mycat分片规则

  • 枚举法 sharding-by-intfile
    • 给字段赋值时,值只能在规定的范围内选择 根据给定的字段值分片数据存储到哪个节点
  • 固定分片 rule1
  • 范围约定 auto-sharding-long
  • 求模法 mod-long
    • 给字段取模 分配到对应的节点服务器
  • 日期列分区法 sharding-by-date
  • 通配取模 sharding-by-pattern
  • ASCLL码求模通配 sharding-by-prefixpattern
  • 编程指定 sharding-by-substring
  • 字符串拆分hash解析 sharding-by-stringhash
  • 一致性hash sharding-by-murmur

mycat工作原理

收到一个SQL命令时

  • 解析SQL命令涉及到的表
  • 然后看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获得分片列表
  • 然后将SQL命令发往对应的数据库服务器去执行
  • 最后收集和处理所有分片结果数据,并返回到客户端0

分片案例

前置准备
主机名 角色 数据库 IP地址
user 客户端 192.168.4.50
db2 分片服务器 192.168.4.51
db3 数据库服务器 db1 192.168.4.53
db4 数据库服务器 db2 192.168.4.54
db5 数据库服务器 db3 192.168.4.55
过程
#4.51 配置分片服务器
yum -y install java-1.8.0-openjdk  #mycat基于Java
which java;java -version   #确认安装和版本
/usr/bin/java 
openjdk version "1.8.0_161"                #版本对的
OpenJDK Runtime Environment (build 1.8.0_161-b14)   
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/  #解压mycat源码包
ls /usr/local/mycat/
bin  catlet  conf  lib  logs  version.txt
#程序 复杂查询 配置文件  包  日志

mycat的server.xml rule.xml schema.xml log4j2.xml 四种配置文件的简述

  • server.xml
    • 配置系统参数
    • 配置用户访问权限
    • 配置SQL防火墙以及SQL拦截功能
  • rule.xml
    • 配置水平分片的分片规则
    • 配置分片规则对应的分配函数
  • schema.xml
    • 配置逻辑库及逻辑表
    • 配置逻辑表所存储的数据节点
    • 配置数据节点所对应的物理数据库服务器的信息
  • log4j2.xml
    • 配置日志展示的格式
    • 配置日志级别
    • 等等
#4.51
#配置mycat配置文件
vim /usr/local/mycat/conf/server.xml    #设置连接账号 测试不用修改啥
========================================
....
<user name="root">        #连接mycat服务时使用的用户名
     <property name="password">123456</property> #用户连接mycat用户时使用的密码
     <property name="schemas">TESTDB</property> #逻辑库名
</user>
<user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>    #只读权限,连接mycat服务后只有读记录的权限,不写这一行则是可读可写    
</user>
....
===================================================


vim /usr/local/mycat/conf/rule.xml  #看看就好 没啥改的

#去除本次测试无关配置
cd /usr/local/mycat/conf/
wc -l schema.xml
77 schema.xml

sed -i '56,77d' /usr/local/mycat/conf/schema.xml    #先删除下面的 先删除上面的话 行号会变
sed -i '39,42d' /usr/local/mycat/conf/schema.xml
sed -i '16,18d' /usr/local/mycat/conf/schema.xml

wc -l schema.xml
48 schema.xml   #删除后为48

修改schema.xml

<!--4.51分片服务器操作-->
vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            	<!--定义逻辑表属性 在哪个节点  使用上面分片规则-->
                <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
                <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
                <table name="goods" primaryKey="ID
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值