分布式数据存储

分布式数据存储

海量数据的存储问题

  • 如今随着互联网的发展,数据的量级也是成指数的增长 从GB到TB到PB

  • 对数据的各种操作也是愈加的困难,传统的关系型数据库 已经无法满足快速查询与插入数据的需求。

  • 这个时候NoSQL的出现暂时解决了这一危机
    它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。
    但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如 有些使用场景是绝对要有事务与安全指标的
    这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库

  • 如果使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群

  • 为了提高查询性能将一个数据库的数据,分散到不同的数据库中存储。

数据切分

什么是数据库分片

  • 简单来说,就是指通过某种特定的条件
  • 将我们存放在同一个数据库中的数据分散存放到多个数据库主机上,以达到分散单台设备负载的效果。
  • 三种分片模式

垂直切分

分布式数据存储_第1张图片

  • 垂直切分是根据 业务维度来拆分数据库

  • 同一个应用程序下
    用户模块 对应用户数据库的开发…
    订单模块 对应订单数据库的开发…

  • 两个不相互,影响却是 运行于一个项目开发

水平切分

分布式数据存储_第2张图片

  • 水平切分是按照某个字段的某种规则,从数据维度 进行数据的拆分
  • 将一个海量的数据库,表中数据,根据某种规则, 分发到 多个 相同结构的数据表中!
    注意! 拆分的数据库/表,结构必须一样,不然还怎么分发…

混合切分

  • 实际开发中常见! 就是将 垂直模式 水平模式 两种模块的混合就是 混合模式切分
  • 从业务维度 和 数据维度的结合,对海量数据进行的拆分操作…

数据库中间件:Mycat

简介

  • Mycat 背后是阿里曾经开源的知名产品——Cobar
    Cobar 的核心功能和优势是 MySQL 数据库分片,此产品曾经广为流传。
  • Mycat 是基于 cobar 演变而来,对 cobar 的代码进行了彻底的重构
  • 使用 NIO 重构了网络模块,并且优化了 Buffer 内核,增强了聚合,Join 等基本特性,
    同时兼容绝大多数数据库成为通用的数据库中间件。 Mysql  Oracle  SQLServer…

总结:

  • MyCAT就是: 一个数据库中间件产品支持mysql集群,
  • 因为Mycat 开发团队就是Mysql的开发团队,都是一家的…两者兼容性极高!
  • 你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。

Mycat 概念说明:

分布式数据存储_第3张图片

逻辑库:schema

  • 逻辑库是数据库集群对外的统一访问入口,
    程序先连接到逻辑库上,再由逻辑库进行分配
  • 实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念
    所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

逻辑表:table

  • 应用读写数据的表是逻辑表,是由一个或多个物理表组成
    逻辑表上记录着 多个数据节点分片!通过向逻辑表读写操作, 而操作多个数据节点分片!

数据节点:dataNode

  • 数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)

数据主机:dataHost

  • 数据节点所在的主机 就是 数据主机
  • 即:具体物理数据所在的数据库地址! Mysql / Oracle 具体数据库的地址…
  • 多个数据节点,可以是不同的数据主机…在不同的ip地址下…数据库集群…

分片规则:rule

  • 一个大表被分成若干个分片表,就需要一定的规则
  • 这样按照某种业务规则把数据分到某个分片的规则就是分片规则,
    数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。

Mycat 环境搭建:

安装环境

  • 要求jdk必须是1.7及以上版本
  • 推荐mysql是5.5以上版本
  • Mycat的官方网站:

安装步骤

  • Mycat有windows、linux多种版本。 本人Windows 为主!
  • Mycat 基本是解压即用的…
  • 管理员cmd: bin目录下启动Mycat: mycat.bat start
  • Mycat的默认端口号为:8066

分布式数据存储_第4张图片

  • 停止:mycat.bat stop

注意:

在windows上安装mycat执行命令时

  • cmd控制台 wrapper | OpenSCManager failed - 拒绝访问。 (0x5)解决
  • 这是因为当前用户权限不够,运行cmd时以管理员身份运行即可

搭建java环境

  • conf 目录下,wrapper.conf文件修改对应的java jdk对应的目录
    例如:wrapper.java.command=G:\java_jdk\jdk\bin\java.exe

提示你需要安装运行环境:

  • cmd管理员运行: mycat.bat install

Mycat 配置文件:

分布式数据存储_第5张图片

  • rule 设置分片规则

  • schema 设置分片逻辑库信息…

  • server 设置 Mycat 用户/密码


本人这里截取本人的一些片段了解…

rule.xml

  • 配置分片规则!

	<tableRule name="mod-long">
		
		<rule>
			<columns>idcolumns>
			<algorithm>mod-longalgorithm>  	
		rule>
	tableRule>
	

	<function name="murmur"
		class="org.opencloudb.route.function.PartitionByMurmurHash">
		<property name="seed">0property>
		<property name="count">2property>
		<property name="virtualBucketTimes">160property>
		
		
	function>
	
	
	<function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
		
		<property name="count">3property>
	function>

schema.xml

	
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
	
		<table name="WSM" dataNode="dn1,dn2,dn3" rule="mod-long" />
	schema>
	
	<dataNode name="dn1" dataHost="localhost1" database="wsm-mycat1" />
	<dataNode name="dn2" dataHost="localhost1" database="wsm-mycat2" />
	<dataNode name="dn3" dataHost="localhost1" database="wsm-mycat3" />

	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
		writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

		<heartbeat>select user()heartbeat>
		
		<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="ok">
			
			
		writeHost>
	dataHost>

server.xml

  • 配置了Mycat 的用户信息!
	
	<user name="test"> 
		<property name="password">testproperty>
		<property name="schemas">TESTDBproperty>   
	user>

运行测试:

分布式数据存储_第6张图片

  • 创建三个 Mysql 物理库: 各存在一个 wsm表 三个表结构都要一样!

  • mycat schema.xml文件进行管理:
    分布式数据存储_第7张图片

  • 在Mycat 上查询…自动根据 schema.xml文件 映射查询到Mysql 对应库上的 表!

  • Mycat连续新增三条记录:
    分布式数据存储_第8张图片

  • 三个记录,根据 mod-long分片规则进行了,轮询有序的 取模拆分到三个数据库中去!
    分布式数据存储_第9张图片

  • 忽略我的数据,中间出来点意味,数据有点不符合…

你可能感兴趣的:(SpringBoot,分布式数据库存储,Mycat,数据切分)