高性能MySQL第十一章 读书笔记
2020-08-07 本文已影响0人
yellowone
第11章 可拓展的MySQL
- 可拓展性表明了当需要增加资源以执行更多工作时,系统能获得划算的等同提升的能力。
- 从不同的角度来考虑负载很有帮助,例如从数据量,用户量,用户活跃度,相关数据集的大小等。
- 理想状态中的性能可以随着机器的增加而线性增长,但是在现实中,大部分系统只能以比线性扩展略低的扩展系数进行扩展。
- 产生无法线性拓展的因素主要有两个因素,一个是无法并发执行的一部分工作,以及需要交互的另外一部分工作。
- 使用更强悍的机器,垂直扩展,使用多台机器,水平拓展。
- 规划可拓展性最困难的部分是估算需要承担的负载到底是多少。
- 在短期内可以通过向上扩展和删除一些冷数据来争取实现向外扩展的时间。
- 向外拓展 的方式有:按功能拆分,将互不相关的业务放到不同的mysql服务器上,数据分片,将同一类型的数据,根据某种规则去分配到特定的服务器上面去。但是分片实现相对复杂,如非必要,尽量不分片。
- 在分片拆分的时候,那些数据之间相互依赖程度高的数据模型,是很难进行分片的。
- 在适当的时候利用列数据冗余可以优化水平分片的完全冗余的数据存储。
- 每个分片的大小可以相对小一些,这样有容易管理(修改表结构),便于转移。但是也不能太小,会产生太多的表。
- 固定分片的主要优点是简单,开销低,甚至可以在应用中直接硬编码。但是难以扩展和迁移。最好使用动态分片。
- 动态分区可以很方便的实现拓展,但是相对复杂。
- 给分片表中设置步长可以生成唯一id。或者使用一个负责生成id的节点表,使用一些第三方工具如redis的inic(丢失了很麻烦)。批量申请id,或者是分片号+id去实现复合值。
- 最好的拓展策略并不是一开始就建立一个超大的架构,最好的策略是实现应用所明确需要的,并为可能的快速增长做好预先规划。
- 不必亲力亲为,有很多中间件已经实现得很好了,不需要重复发明轮子。