mysql读写分离优点_mysql读写分离

mysql读写分离优点_mysql读写分离什么是读写分离在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。读写分离的好处1)分摊服务器压力,提高机器的系统处理效率读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问…

大家好,又见面了,我是你们的朋友全栈君。

什么是读写分离

在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。

读写分离的好处

1)分摊服务器压力,提高机器的系统处理效率

读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;

假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;

2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务

什么是  Mycat

是一个开源的分布式数据库系统,但是因为数据库一般都有自己的数据库引擎,而Mycat并没有属于自己的独有数据库引擎,所有严格意义上说并不能算是一个完整的数据库系统,只能说是一个在应用和数据库之间起桥梁作用的中间件。

在Mycat中间件出现之前,MySQL主从复制集群,如果要实现读写分离,一般是在程序段实现,这样就带来了一个问题,即数据段和程序的耦合度太高,如果数据库的地址发生了改变,那么我的程序也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而对于很多应用来说,并不能接受;

引入Mycat中间件能很好地对程序和数据库进行解耦,这样,程序只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务的,大量的通用数据聚合、事务、数据源切换等工作都由中间件来处理;

Mycat中间件的原理是对数据进行分片处理,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成完成的数据库存储,有点类似磁盘阵列中的RAID0.

实现读写分离

准备工作

步骤一:创建数据库

#创建数据库

CREATE DATABASE weibo_simple

步骤二:创建用户表

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE TABLE `t_users` (

`user_id` varchar(64) NOT NULL COMMENT ‘注册用户ID’,

`user_email` varchar(64) NOT NULL COMMENT ‘注册用户邮箱’,

`user_password` varchar(64) NOT NULL COMMENT ‘注册用户密码’,

`user_nikename` varchar(64) NOT NULL COMMENT ‘注册用户昵称’,

`user_creatime` datetime NOT NULL COMMENT ‘注册时间’,

`user_status` tinyint(1) NOT NULL COMMENT ‘验证状态 1:已验证 0:未验证’,

`user_deleteflag` tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤三:创建微博表

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE TABLE `t_message` (

`messages_id` varchar(64) NOT NULL COMMENT ‘微博ID’,

`user_id` varchar(64) NOT NULL COMMENT ‘发表用户’,

`messages_info` varchar(255) DEFAULT NULL COMMENT ‘微博内容’,

`messages_time` datetime DEFAULT NULL COMMENT ‘发布时间’,

`messages_commentnum` int(12) DEFAULT NULL COMMENT ‘评论次数’,

`message_deleteflag` tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,

`message_viewnum` int(12) DEFAULT NULL COMMENT ‘被浏览量’,

PRIMARY KEY (`messages_id`),

KEY `user_id` (`user_id`),

CONSTRAINT `t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_users` (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

48304ba5e6f9fe08f3fa1abda7d326ab.png

安装mycat

步骤一:解压mycat,不要放在有中文目录的文件夹下

a3b94156ebdee87ee1d077ffb876b076.png

步骤二:修改mycat目录下的conf文件夹中的server.xml文件,配置账户

48304ba5e6f9fe08f3fa1abda7d326ab.png

mycat_master

mycat

mycat_slave

mycat

true

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤三:配置schema.xml文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

writeType=”0″ dbType=”mysql” dbDriver=”native” switchType=”1″

slaveThreshold=”100″>

select user()

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤四:配置rule.xml文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

user_id

func1

autopartition-long.txt

48304ba5e6f9fe08f3fa1abda7d326ab.png

步骤五:配置启动日志文件log4j.xml

步骤六:启动mycat,默认端口为8066

master

1a9e78da4354cd679b1eba3ce1974aea.png

master机器上可以进行读写操作

886560d28850f5632765981770f9a990.png

slave

6c7747542ff8c303f5496f7cdb7a2fc4.png

slave机器上可以进行读操作,进行写操作时会报错

5fbd5adf96de4e9fe4479fd7996ca3f3.png

注意注意注意特别注意

1.在使用mycat连接SQLyog时,SQLyog版本不能太低,版本不能太低,不能太低,需要高版本!!!

2.在双击启动mycat时,如果控制台一闪而过,参考方案如下

修改startup_nowrap.bat启动文件,内容如下

“%JAVA_CMD%” -server -Xms512M -Xmx600M -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp “..\conf;..\lib\*” org.opencloudb.MycatStartup

好文要顶 已关注 收藏该文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130394.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于java的贪吃蛇游戏的设计与实现(贪吃蛇安卓游戏源码)

    一.前言某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩。自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏案例,没有想要的实现,因此自己动手实现一个JAVA版的贪吃蛇游戏。我在这个Dome完成之后重写了这个游戏的Android版,并重新更名为《蛇王传说》。也欢迎大家下载试玩。游戏下载地址:https…

    2022年4月18日
    76
  • 啦啦外卖商家端APP打包

    经过多日终于打包啦啦外卖商家端打包好,语音播报,扫一扫,订单推送,下面是打包好的演示图片,不懂的小伙伴可以叫我讨论一下。

    2022年4月7日
    41
  • Java集合篇:Vector

    Java集合篇:Vector

    2021年10月4日
    39
  • Qt5 QMediaPlayer 音乐播放器

    Qt5 QMediaPlayer 音乐播放器   暑假用Qt写的音乐播放器,界面有点丑,然后功能也有点少,还有一些bug,然后现在趁着寒假的时间把之前的界面给改了一下,并添加了一些功能,修改了一些bug,实现功能包括基本的歌曲播放暂停,上一首,下一首,添加歌曲,添加为我喜欢,添加至我的收藏,最近播放,列表的右键菜单,主窗口的右键菜单,删除歌曲,多选,查看歌曲信息,改变播放模式(顺序播放,随机播放,单曲循环),歌曲定位,清除列表,换皮肤…

    2022年5月30日
    40
  • mysql和mongodb的区别是什么_mongodb和mysql的区别是什么?区别详细介绍

    mysql和mongodb的区别是什么_mongodb和mysql的区别是什么?区别详细介绍对于mongodb和mysql你应该都很清楚了吧,那么他们两个之间的区别你知道吗?很多人对于mongodb和mysql的区别都不是很清楚,下面一起来了解一下吧。一、mongodb和mysql的区别有哪些?对于这两者的区别,我们可以从以下的九个方面来谈一下。1、数据库模型mongodb-非关系型;mysql-关系型;2、存储方式mongodb-以类JSON的文档的格式存储;mysql-不同引擎有不同…

    2022年6月23日
    25
  • for循环break,continue「建议收藏」

    for循环break,continue「建议收藏」for循环break,continue

    2022年4月20日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号