水平分表
优点:减少单表记录行数,加快查询速度
缺点:增加了代码维护难度( 代码需要修改 )
分区技术
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',
job_code INT NOT NULL,
store_id 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)
);
select id from employees where store_id = 4;//p0
从小的文件中搜索内容要比大文件要快
//partition by range (范围)
MYI 以.myi是存放索引
MYD 以.myd存放数据
FRM 存放表定义、表结构
只要一个表有三个文件,这个表的引擎一定是myisam
主从、分表、分区技术
CDN( 内容分发网络 )
通过在网络各处(网络节点)放置服务器,将静态资源缓存在离用户最近的地方,使用户以最快速度获取数据。
CDN放置的是静态资源:CSS、JS、图片、视频、字体
服务器在北京 但是在广州有CDN服务器。在上海也有CDn
广州用户要数据( 数据库数据、网页数据、样式 )
上海用户要数据( 静态数据去上海 )
就近原则。
CDN : 使用第三方提供。 百度、阿里、七牛
反向代理服务器
反向代理就是一个缓存。
如果反向代理服务器有用户要的数据,那么直接由反向代理服务器直接返回给用户。不需要再访问我们服务器集群。
如果反向代理服务器没有用户要的数据,那么就由反向代理服务器
代理我们用户去访问我们服务器集群。拿到数据,先在反向代理服务器
保存一份,然后再给到用户。
反向代理服务器:Nginx / Squid
文件服务器
TFS (淘宝文件系统) 分布式的文件系统,
但是TFS比较适用于类似淘宝商城。( 小文件比较多的情况 )
GFS(谷歌文件系统)
站内搜索
站内搜索大型网站一定不能使用。因为like会导致一个全表扫描。
就是一个表如果有1000万行数据,那么like就扫描1000万数据。
站内搜索使用:sphinx(斯芬克司)、但是sphinx不支持中文。
coreseek、xunsearch(建议使用这个。因为这是国产,中文文档多 )
建议:研究xunsearch,然后把它用到你的项目中。
不能现在就停。
NoSQL( 非关系型数据库 )
与mysql不同点:NoSQL的数据存放内存里面去。
NoSQL产品: Redis / MongoDb / Hbase
百度:产品:搜索、地图、百科、贴吧
搜索有专门的服务器集群
地图有服务器
贴吧服务器
这样做的好处: 1、 容易维护 2、 提高系统速度
经营自己的项目
好处:可以用自己的感兴趣的所有技术。
谷歌技术。每年有一些分享会议。
谷歌 IO大会。 谷歌还会公布他一些技术。
IDE(集成开发环境)
PHP: phpstorm zendStudio
消息队列(让你的请求在排队)
队列:先进先出。
函数:array_push() 尾部进去 array_pop() 头部出来
总结:
1. 架构: CDN、 反向代理服务器( Nginx/Squid )
负载均衡器( LVS/F5 ) =》 应用服务器
数据库( 读写分离、分布式数据库 ) 非关系型数据库( Redis MongoDb)
缓存( Memcache File ) 搜索引擎( sphinx xunsearch )
消息队列 文件服务器( TFS / GFS )
=================
数据库读写分离
原理:从库复制主数据库的bin-log日志。然后 到从库执行。
主库:88 从库:168
168到88上面拿东西bin-log。
主库(88)给从库(168)授权
查看bin-log日志
bin-log作用:1、使用bin-log作数据恢复 2、利用bin-log作主从配置
利用bin-log做数据恢复
user
id name
1 jack
2 mary
晚上00:00 做了一个备份 mysql.sql
晚上01:00 有一个新用户注册了 rose
user
id name
1 jack
2 mary
3 rose
早上8:00时候数据库被攻击,导致数据丢失
数据恢复:mysql.sql 没有rose
如何完整?
主从数据库优点
- 读写分离,减轻单个数据库压力
- 提高查询速度。
- 从库起到一个备份的作用。 提高系统可靠性、稳定性。
缺点: 1. 当并发量大的时候,实时性不高。
例子:微博。微博特点:实时性要求很高。
建议:一些实时性要求比较高的数据,还是从主库中读取。
微博? =》 主从只是一种方式。还有其他主从方式
主从配置还可以优化。
一个网站如何加快响应速度
部分:服务器(买更好的服务器)、数据库(mysql)、系统(Linux)、代码( 前端、后端 )
-
优化前端 a. 减少http请求 比如:减少图片、压缩css、压缩js 使用浏览器缓存
b. CDN加速 就近原则。
c. CSS放在页面最上面,JavaScript放在页面最下面
d. 减少COOKIE传输
COOKIE数据很大。不要往COOKIE里写过多的数据
-
后端 ( 没有人想要优化后端代码 )
-
MySQL优化 a. 配置优化 mysql本身也有缓存(查询相同数据,第二次就是从mysql的缓存中拿的)
b. 表结构优化 字段类型 表的设计最好符合三范式 表引擎的选择(myisam innodb) 表的字符集(gbk utf8)
c. SQL语句 避免子查询
减少多表联查
d. 合理使用索引
索引:索引其实就是一本书的目录
有什么索引:主键、唯一、普通索引、全文索引
索引优点:加快查询速度
缺点:1、占用空间 2、写操作比较慢( 需要写入数据、还需要更新索引 )
c. 分表、分区、主从数据库
-
缓存 Memcache Redis 页面静态化