四、数据库的横向拓展策略
11课-正确使用索引
对于大规模数据来说,表的一个改动都会带来很大的变化。熟悉数据库中每种数据类型的大小
4.1.1 灵活应用操作系统缓存
考虑全部数据量 :
- 保持数据量小于物理内存
- 内存不足时增加内存
考虑表结构设计对数据大小的影响
4.1.2 索引的重点-B树
1.索引使用B树
磁盘里面是分块的,跨块读取的数据的速度消耗的时间比在同一个块中读取数据的时间要多。B树可以通过调整每颗树中节点的大小,使之和磁盘中的大小一致,这样每次读取B数中的数据时,效率较高。
2.索引的作用-MySQL
使用MySQL索引的语句有:where , order by , group by 中指定的列
索引什么时候有效
- 明确地添加索引
- 主键、UNIQUE的约束
3.MySQL索引的陷阱
如果想要使用多个列上的索引,必须使用复合索引 。如果在查询语句中,使用到了多个索引,在MySQL中,只会使用一个索引,而其它的列并不使用索引。
记住,MySQL每次查询只能使用一个索引,如果要用到多个列,设置复合索引,
4.确认索引是否有效-explain命令
12课-MySQL的分布式:以拓展为前提的系统设计
4.2.1 MySQL的Replication功能
- master/slave的架构
- 查询发给slave、更新发给master(相当于查询做负载均衡,更新时要保持一致性)
4.2.2 对更新/写入类进行拓展–表分割、key-value存储
对于web服务来说,查询类的请求远远多于写入类的请求。比如1000个看博客的人中,很有可能只有1个是写博客的。一般来说,master不像读取类,很少成为瓶颈。当然,偶尔也会出现写较多的应用程序,这个时候如何处理?
1.表分割
通过分割缩小表的大小,同时分散写入操作。如果可以分科表文件,就可以将其分散在同一台机器中的多块硬盘上,也可以分散在多台服务器上。
2.key-value存储
如果Web应用程序只需要保存值、取出值,而不需要关系型数据库那些复杂的统计处理和通用排序处理等,key-value存储结构的额外开销更少,速度也要快得多,拓展也更容易。
4.2.3 master/salve的特征
1. 查询可以拓展
- 只需要增加服务器即可
- 在增加服务器之前安装适当的内存
2. master无法拓展
- 更新类的查询增加后情况更加严峻。
- Web应用多数是查询类请求
- master的负载通过表分割或更换实现方法来解决。
13课-MySQL的横向拓展和Partitioning(表分割)
在上两课中,MySQL的横向拓展策略是:数据能放入内存就放入内存,不能就增加内存,仔细建立索引等。
Partitioning,即表分割。将一个表分割成多份放在不同的服务器中,但是MySQL并没有将位于不同服务器上的表JOIN起来的功能。(也就是不能用JOIN)
避免JOIN的方法:利用Where…in..
Partitioning的优点:
降低负载
增加局部性,提高缓存效果。
缺点
- 运维变得复杂,故障率上升
本文介绍了MySQL的横向拓展策略,包括正确使用索引、操作系统缓存、表分割、key-value存储等方法,以及如何通过Replication功能实现负载均衡,并讨论了master/slave架构的特点。

被折叠的 条评论
为什么被折叠?



