数据量增多,单机的数据库不足以支撑业务,需要用到数据库集群。而读写分离,就是将数据库的读和写分离,对应到数据库一般就是主从数据库,一主一从或者一主多从;业务服务器把数据写到主数据库中,读操作都去从库读;主库会同步数据到从库,保证数据的一致性。

主从集群

这种集群方式,就是将访问的压力从主库转移到从库,单机的数据库不能支撑并发读写的时候,而且读的请求很多的情况下就适合数据库集群。如果写的操作很多的话,那就不适合这种集群方式,因为写的时候是写入主库,主库的压力还是没有变化,同时同步到从库也需要消耗资源。

单机的时候,一般数据库优化就是加索引,但是加了索引对查询有优化,但是写入的时候会有影响,因为写入的数据库不会更新索引。所以在主从数据库中,可以单独的对读库(从数据库)做索引,而写库(主数据库)可以减少缩影而提高写的效率。

但是主从数据库中需要注意:主从同步延迟、分配机制的考虑

主从同步延迟

二次读取

一般操作是,在从库读取数据时,没有读到数据,就去主库进行数据读取。但是这种操作还是将读的压力返还给主库,如果有恶意的攻击,主库就爆了。

一般情况下,通过对数据库访问的API进行封装就能实现这个功能,业务之间没有耦合。

写了之后的马上读操作操作主库

在写了数据后,立马读操作就去访问主库,之后的读操作访问从库,这种业务上会有高度耦合。

根据业务,将重要的业务数据的读写都放在主库,其他的业务进行读写分离

类似付钱的这种业务,读写都到主库,避免延迟的问题,但是例如改个头像啊,个人签名这种比较不重要的就读写分离,查询都去从库查。

分配机制的考虑

分配机制的考虑,就是怎么制定去操作去主库写,去从库读。

代码封装

抽取一个中间层,让中间层来实现读写分离和数据库连接。即封装一个provider,包含了对数据的save,query等操作,当save时操作的数据库是主库的,query时操作的数据库是从库。

实现简单,但是如果如果其中一个数据库宕机了,就需要修改配置重启项目。还有如果有多个子系统的话,语言不一致的话,就会进行重复的开发。

数据库中间件

有专门的独立系统来实现读写分离和数据库连接管理,业务服务器和数据库中间件通过SQL协议交流,在业务服务器看起来,数据库中间件就是一个数据库。

因为是通过sql协议的所以可以兼容不同的语言不需要单独写一套,并且有中间件来实现主从切换,业务服务器不需要关心这点。但是多了一个服务,就会有其他的消耗,难于管理,而且中间件性能要求高,实现复杂,难度高。

开源的中间件有Mysql Proxy,Atlas。

数据库中间件

总结

读写分离理解和实现相对简单,但是只能减少访问的压力,不能分担存储的压力,当数据增多是,查询的速度还是会很慢。这时候就需要用到分库分表了。

正常情况下,单机不能支撑业务时,才会用数据库集群,软件设计越简单的设计越好。

一般数据库的优化是,先优化一些查询操作,然后优化业务的逻辑,或者加入缓存,最后不行再用集群,最后再分库分表。

mysql怎么分读写_MYSQL的读写分离相关推荐

  1. mysql简单分表_mysql分区分表哪个好

    一,什么是e69da5e6ba9062616964757a686964616f31333365633933mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mys ...

  2. java面试 mysql分库分表_MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇...

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  3. mysql年月分表_MySQL之按月拆分主表并按月分表写入数据提高数据查询速度

    使用场景: 主表数据量特别大,为了提高查询的速度,可以考虑按月进行分表,要求就是当月的数据到当月表查询,上月的数据到上月表查询,当天的数据到主表来查询.这样在一定程度上也是提高了数据的查询速度 过程演 ...

  4. mysql 自动分表_Mysql Event 自动分表

    create table TempComments Like dycomments; 上述 SQL语句创建的新表带有原表的所有属性,主键,索引等. 自动分表怎么做呢? 使用上述语句自动创建分表. 那么 ...

  5. mysql 横向分表_mysql横向和纵向的数据库分表

    分表是分散数据库压力的好方法. 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库. 当然,首先要知道什么情况下,才需要分表.个人觉得单表记录条数达到百万到千万 ...

  6. mysql如何分表_MySQL分表和分区的具体实现方法

    垂直分表 垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择). 优势:在高并发的情境下,可以减少表锁和行锁的次数 ...

  7. mysql分页分表_mysql分表后 如何分页 (总共160个表1500万数据)

    mysql分表后,有160个表,有1500万数据,要怎么做分页列表? 之前是想用union all合并160个表的结果集..但直接卡的数据都出不来.. 请问这里应该怎么做分页,谢谢~~~ 回复讨论(解 ...

  8. mysql年月分表_MySQL 按日期分表

    一.表不存在时则创建 之前做项目实在是太赶了,很多东西都没记录.是时候补回来了 MySQL做一个大表,由于要存历史记录,所以数据量很大,查询很慢.恰好查询的时候,又不需要时间太久的冷数据.现在将其实现 ...

  9. mysql myisam 分表_mysql myisam简单分表设计

    一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是 ...

  10. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

最新文章

  1. eclipselink mysql_Eclipse连接MySQL数据库(傻瓜篇)
  2. 史上最简单粗暴获取阿里巴巴iconfont图标,并引用到vant的方法(没有之一)
  3. NYOJ 90 —— 求正整数n划分为若干个正整数的划分个数
  4. CKEditor+CKFinder配置学习
  5. Mac 安装 Jenkins
  6. 炎炎夏日需要一个清凉的地 - 自制水冷系统
  7. 抓包工具Wireshark基本介绍和学习TCP三次握手
  8. [二]RabbitMQ-客户端源码之AMQConnection
  9. 业内首发,ACK@Edge支持高质量加密网络与精细化管理
  10. 商城是用jsp还是php,建设网上购物网站使用JSP系统还是ASP系统
  11. java servlet 接收post_java 代码post表单数据到服务器,servlet接收处理
  12. 消耗报表数据库呈现了流动变乱的回滚段破损(三)
  13. WinXP/2000/2003下如何重装TCP/IP协议
  14. 移动通信原理B-------例题解答2
  15. 微信小程序 图片轮播 视频
  16. 抖音特效专场PR模板 Premiere视频转场过渡快速切换画面视频模板下载
  17. word 中如何去掉复制的文字的底纹?
  18. ubuntu格式化硬盘
  19. 【EC200U】 基站定位
  20. C#使用iTextSharp打印PDF

热门文章

  1. java 排水管网 系统_排水管网数字化管理系统
  2. splice方法_JavaScript数组_数组方法【一】(二十六)
  3. 算术表达式:前缀表达式、中缀表达式、后缀表达式相互转换(手算法)
  4. JavaScript:手写JSONP
  5. Pannellum:实例之一个简单的例子
  6. Visual Studio Code(VS code)简单使用入门以及常用快捷键
  7. 历史悠久的区块链游戏:麻将
  8. SLAM基础_什么是ORB特征,怎么计算的?
  9. android for opencv (2) byte[] ,Bitmap 与 Mat 类型转换,Bitmap保存照片
  10. 浅谈CSwin-Transformers