您现在的位置是:首页 >MySQL网站首页MySQL

数据库优化

简介说起数据库优化,其实方法也有很多,但是都不简单,从小的纵向扩展到大的横向扩展,都是需要多年的经验才能做得很好。或许你工作在一个小公司,装备比较‘原始’,那肯定要是会省经费省资源的了。若是在大公司,横向扩展那是要掌握的了。像LVS/F5等至少都要熟悉才能为公司创造价值。

读写分离

主库负责写,从库负责读。 数据如何同步:从库复制主库的bin-log文件,因为bin-log文件存放的是写到主库SQL语句。

还有哪些产品可以做到读写分离: 1. mycat 2. 360 proxy

https://github.com/Qihoo360/Atlas

负载均衡器

作用: 起到分发请求的作用。

有哪些: LVS/F5/Nginx

带来的问题:

  1. 不同的应用服务器之间无法共享SESSION数据

    解决方案:1. 放到数据库  2. 放到缓存  3. 放到SESSION服务器   4. 放到COOKIE中

冗余技术

作用:为了防止网站单点故障。

冗余技术就是增加多余的设备,以保证系统更加可靠、安全地工作。

大网站一定要做到高可靠。高可靠:99.999%

异地备份,容灾

服务器集群 = 负载均衡 + 冗余

一般的网站都是读多写少

MySQL做了读写分离还需要做很多工作

当用户量达到两个亿,意味着用户表的数据有两个亿的数据。

  1. MySQL单表的记录行数不要超过1千万。

  2. 文件,数据变大,查询速度都会变慢。

  3. 分表(重点)

    垂直分表、水平分表

    垂直分表: 就是将一些字段划分到其他的数据表中。

    水平分表: 就是将数据划分到不同表中。 水平分表优点:1. 减小单表数据行数 2. 加快查询速度

  4. 关注一个公众号: 架构师

user表

id   name   pass

2    jack   fjdsla

4    lili    fjlala

user1 id   name   pass 1    fj     jjf

3    mary    fjdlks

分区

一张表进行分区后,一张表还是一张表,只是存放数据的文件变多了。

CREATE TABLE employees (    id INT NOT NULL,    fname VARCHAR(30),    lname VARCHAR(30),    hired DATE NOT NULL DEFAULT '1970-01-01',    separated DATE NOT NULL DEFAULT '9999-12-31',    jobcode INT NOT NULL,    storeid INT NOT NULL ) PARTITION BY RANGE (store_id) (    PARTITION p0 VALUES LESS THAN (6),    PARTITION p1 VALUES LESS THAN (11),    PARTITION p2 VALUES LESS THAN (16),    PARTITION p3 VALUES LESS THAN (21) );

结论:大网站暂时没有去使用。因为分区只能对数字类型进行分区。

MyISAM引擎与Innodb引擎的区别(重点)

  1. MyISAM引擎会产生三个文件,分别是.MYD是存放数据,.MYI存放索引,.FRM存放表定义。Innodb只会产生一个.frm文件,innodb引擎的数据是存放ibdata1这个文件中

  2. Innodb支持事务处理,MyISAM不支持事务的

  3. Innodb支持行锁,表锁,MyISAM只支持表锁

  4. 一般认为MyISAM查询速度比Innodb快

CDN加速

CDN(内容分发网络), 只能存放静态资源(HTML/图片/视频)的。CDN可以把你的静态资源放到离用户最近的地方。

用户分布广,网络情况复杂。网站保证每个用户访问你的网站,又不能很慢。

搜索引擎

大网站站内搜索:  不能使用like, 因为like会扫描整个表。

站内搜索使用搜索引擎。 比如:sphinx/xunsearch/coreseek


从库复制主库bin-log文件。

MySQL操作bin-log文件的命令

//新增一个bin-log文件 mysql> flush logs;

//清空所有的bin-log mysql> reset master;

//查看数据库bin-log文件状态 mysql> show master status;

## 利用MySQL的bin-log文件配置的读写分离存在的问题

  1. 从库与主库之间数据同步会有一定时间差,当同时往主库里面插入很多数据,时间差更加明显

  2. 有些时候,实时性高的数据还是从主库查

文章评论

Top