mysql读写分离

数据库(分库分表)中间件对比

非 Y 不嫁゛ 提交于 2019-12-03 15:22:28
数据库(分库分表)中间件对比 https://www.cnblogs.com/cangqiongbingchen/p/7094822.html 基本概念:分区,分片,分表,分库 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张表。分区可以把表分到不同的硬盘上,但不能分配到不同服务器上。 优点:数据不存在多个副本,不必进行数据复制,性能更高。 缺点:分区策略必须经过充分考虑,避免多个分区之间的数据存在关联关系,每个分区都是单点,如果某个分区宕机,就会影响到系统的使用。 分片:对业务透明,在物理实现上分成多个服务器,不同的分片在不同服务器上 个人感觉跟分库没啥区别,只是叫法不一样而已,值得一提的是关系型数据库和nosql数据库分片的概念以及处理方式是一样的吗? 请各位看官自行查找相关资料予以解答 分表:当数据量大到一定程度的时候,都会导致处理性能的不足,这个时候就没有办法了,只能进行分表处理。也就是把数据库当中数据根据按照分库原则分到多个数据表当中, 这样,就可以把大表变成多个小表,不同的分表中数据不重复,从而提高处理效率。 分表也有两种方案: 1. 同库分表:所有的分表都在一个数据库中,由于数据库中表名不能重复

【转帖】关于数据库中间件的思考

六眼飞鱼酱① 提交于 2019-12-03 15:16:50
作者:kimmking 链接:https://www.zhihu.com/question/352256403/answer/878523206 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 题主,恭喜你,你深入思考了一系列重要问题,作为一个开源技术人员+数据中间件的爱好者,试着回答一下题主的几个问题: 什么时候需要数据中间件,中间件能干什么 数据中间件的实现原理,有哪些开源数据中间件 为什么都是国内开源的,并且大都停止了更新 推荐使用什么数据中间件,有什么优势 一、什么时候需要数据中间件,中间件能干什么 就像题主说的那样,随着业务的发展,MySQL、Oracle数据库里的表越来越大,一两年以后,2千万、甚至上亿记录的表就会出现了(一般可以简单认为表比较复杂的时候,MySQL几百万上千万的时候,Oracle几千万的时候,就会出现复杂查询或变更有性能问题),这时候可能会导致复杂的查询慢,插入和修改数据慢,修改表的DDL执行太慢导致无法修改列类型或者加索引或者加字段等等。怎么办呢?这时候我们可以由几个处理办法: 历史表:按时间拆分历史表出去,降低数据量,这个以前比较常见,其实也是一种特殊的水平拆分,对业务有侵入性 垂直拆分:按列,将上百列的宽表拆分成多个列少(也就是每条记录数据量小)的表,不降低记录数,但是降低整个表的数据量和索引量大小 水平拆分

MySQL数据库分库分表策略

天大地大妈咪最大 提交于 2019-12-03 15:11:36
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。 水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失; 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性; 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题; 读写分离策略:最大限度了提高了应用中读取数据的速度和并发量; 第2章 基本原理和概念 什么是数据切分 "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中。"Sharding" 姑且称之为"分片"。Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案, 其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。 通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由或者table路由规则找到需要查询的具体的DB或者table,以进行Query操作。“sharding”通常是指“水平切分”

Mysql的数据库引擎

烈酒焚心 提交于 2019-12-03 15:02:37
Mysql的数据库引擎 Mysql的逻辑分层 连接层-->服务层--->引擎层--->存储层 什么是数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。 当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件 注意:数据引擎是指表格中的引擎, 数据库引擎innodb与myisam区别 是否支持事务 InnoDB支持事务 对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin transaction和commit之间,组成一个事务; MyISAM不支持, 支持锁的级别不同 InnoDB支持行锁 注意:数据库的主键和索引对锁是有影响的。 在使用for update的时候,在明确使用主键或者索引的时候才会是行锁,否则就是表锁。 MyISAM只支持表锁 是否支持外键 InnoDB支持外键 MyISAM不支持。 对一个包含外键的InnoDB表转为MYISAM会失败; 存放索引的方式 InnoDB是聚集索引, 数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。 因此,主键不应该过大,因为主键太大,其他索引也都会很大。 MyISAM是非聚集索引,数据文件是分离的, 索引保存的是数据文件的指针

PHP解决网站大数据大流量与高并发

与世无争的帅哥 提交于 2019-12-03 14:03:48
第一,硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有:网络-硬盘读写速度-内存大小-cpu处理速度。 第二,软件方面 第一个要说的就是数据库,首先要有一个很好的架构,查询尽量不用* 避免相关子查询 给经常查询的添加索引 用排序来取代非顺序存取,如果条件允许 ,一般MySQL服务器最好安装 在Linux操作系统中 。关于apache和 nginx 在高并发的情况下推荐使用 nginx ,ginx是Apache服务器不错的替代品。nginx内存消耗少 官方测试能够支撑5万并发连接,在实际生产环境中跑 到2~3万并发连接数。 php 方面不需要的模块尽量关闭,使用memcached,Memcached 是一个高性能的分布式内存对象缓存系统,不使用数据库直接从内存当中调数据,这样大大提升了速 度,iiS或Apache启用GZIP压缩优化网站,压缩网站内容大大节省网站流量。 第二,禁止外部的盗链。 外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对 于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自 己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当 然

Mysql双主加Keepalived

点点圈 提交于 2019-12-03 10:52:26
一、 MySQL于keepalived简介* * 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。 1.1、 MySQL* * 1.1.1、MySQL主从复制原理 复制分成三步: \1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); \2. slave将master的binary log events拷贝到它的中继日志(relay log); \3. slave重做中继日志中的事件,将改变反映它自己的数据。 下图描述了这一过程: 1.1.2、MySQL双主构建思路 1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用; 2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从; 3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务); 4

【转】数据库优化的几个阶段

家住魔仙堡 提交于 2019-12-03 09:14:16
转自: https://www.cnblogs.com/rjzheng/p/9619855.html#4365629 引言 大家在面试的时候,是否遭遇过,面试官询问 你们是如何进行数据库优化的? 那这个问题应该怎么答呢?其实写这个题材的原因是我这几天看到各公众号转的一篇数据库调优的知识(不上链接了),我就稍微翻了几下,上面动不动就来说要对数据库进行 水平拆分 ,我就想反问各位读者,你们几个人经历过 水平拆分 ?现在很多文章,实践性实在太差,只能说纯理论分析。 这篇文章最早来自知乎的一个提问,我在其基础上完善了一下。 第一阶段 优化sql和索引 这才是调优的第一阶段啊, 为什么呢? 因为这一步成本最低啊,不需要加什么中间件。你没经过索引优化和SQL优化,就来什么 水平拆分 ,这不是坑人么。 那 步骤 是什么样呢?我说个大概 (1)用慢查询日志定位执行效率低的 SQL 语句,开启慢查询日志方式: (2)用 explain 分析 SQL 的执行计划 (3)确定问题,采取相应的优化措施,建立索引啊,等 我就不举例了,因为如何优化SQL的文章,一抓一大把,再贴过来,读者看着也累。 第二阶段 搭建缓存 在优化sql无法解决问题的情况下,才考虑搭建缓存。毕竟你使用缓存的目的,就是将复杂的、耗时的、不常变的执行结果缓存起来,降低数据库的资源消耗。 这里需要 注意 的是:搭建缓存后

Day 37 SQL基础(五)

牧云@^-^@ 提交于 2019-12-03 05:01:07
目录 事务处理 开始事务 回滚事务 提交事务 事务的特性 存储引擎 什么是存储引擎 各存储引擎的特性 概览 各种存储引擎的特性 各存储引擎的介绍 视图 创建视图 删除视图 修改视图 触发器 创建触发器 删除触发器 存储过程 创建无参存储过程 创建有参存储过程 执行存储过程 删除存储过程 SQL函数 事务处理 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性 开始事务 start transaction 标识事务的开始 回滚事务 rollback 用来回退(撤销)SQL语句 select * from users; start transaction; update users set age = 18 where id = 120; delete from users where name = 'tiny'; rollback; select * from users; rollback只能在一个事务处理内使用,在执行一条start transaction命令之后 提交事务 commit 一般的MySQL语句都是直接针对数据库表执行和编写的.这就是所谓的隐含提交,即提交(写或保存)操作是自动进行的. 但是.在事务处理块中,提交不会隐含地进行.为进行明确的提交,使用commit语句 start transaction;

NoSQL开篇——为什么要使用NoSQL

假如想象 提交于 2019-12-03 00:13:18
【编者按】NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于NoSQL方面的经验和体会。 非常荣幸能受邀在InfoQ开辟这样一个关于NoSQL的专栏,InfoQ是我非常尊重的一家技术媒体,同时我也希望借助InfoQ,在国内推动NoSQL的发展,希望跟我一样有兴趣的朋友加入进来。这次的NoSQL专栏系列将先整体介绍NoSQL,然后介绍如何把NoSQL运用到自己的项目中合适的场景中,还会适当地分析一些成功案例,希望有成功使用NoSQL经验的朋友给我提供一些线索和信息。 NoSQL概念 随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。 NoSQL 概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一词最早于1998年被用于一个轻量级的关系数据库的名字。) NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。在NoSQL概念提出之前,这些数据库就被用于各种系统当中,但是却很少用于web互联网应用。比如cdb、qdbm、bdb数据库。

第一章·MySQL介绍及安装

强颜欢笑 提交于 2019-12-02 23:45:00
一.DBA工作内容及课程体系 数据库管理员: 1.用户管理 用户名 密码 2.权限管理 读 写 #禁止使用 grant all on *.* to root@'%' identified by '123'; 3.数据管理 增 删 改 查 备份\恢复 4.集群管理 主从复制 异步复制 半同步复制 延时复制 过滤复制 读写分离 mycat atlas mysql-proxy 高可用 MMM MHA 双主+keepalived MGR 监控 shell zabbix percona  二.MySQL课程体系介绍  三.DBA的职业素养  四.MySQL简介及安装 01 什么是数据? 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。 数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。 在计算机系统中,数据以二进制信息单元0,1的形式表示。 数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。* 为什么不把数据放到 word这些工具里面? 1.安全性 2.集群 02 什么是数据库管理系统 DBMS(database management system) 1.管理数据 2.存储数据