System Design 关系型数据库的扩展 - 学习笔记

2018-04-25  本文已影响25人  专职跑龙套

引用:
系统设计入门

主从复制

主从复制
主库同时负责读取和写入操作,并复制写入到一个或多个从库中,从库只负责读操作。
树状形式的从库再将写入复制到更多的从库中去。如果主库离线,系统可以以只读模式运行,直到某个从库被提升为主库或有新的主库出现。

缺点:

主主复制

主主复制

两个主库都负责读操作和写操作,写入操作时互相协调。如果其中一个主库挂机,系统可以继续读取和写入。

缺点:

主从复制和主主复制共同的问题

联合

联合(或按功能划分)将数据库按对应功能分割。
例如,你可以有三个数据库:论坛、用户和产品,而不仅是一个单体数据库,从而减少每个数据库的读取和写入流量,减少复制延迟。
较小的数据库意味着更多适合放入内存的数据,进而意味着更高的缓存命中几率。没有只能串行写入的中心化主库,你可以并行写入,提高负载能力。

缺点:

分片

分片

分片将数据分配在不同的数据库上,使得每个数据库仅管理整个数据集的一个子集。
以用户数据库为例,随着用户数量的增加,越来越多的分片会被添加到集群中。

类似联合的优点,分片可以减少读取和写入流量,减少复制并提高缓存命中率。也减少了索引,通常意味着查询更快,性能更好。如果一个分片出问题,其他的仍能运行,你可以使用某种形式的冗余来防止数据丢失。类似联合,没有只能串行写入的中心化主库,你可以并行写入,提高负载能力。

常见的做法是用户姓氏的首字母或者用户的地理位置来分隔用户表。

缺点:

非规范化

非规范化试图以写入性能为代价来换取读取性能。在多个表中冗余数据副本,以避免高成本的联结操作。

在多数系统中,读取操作的频率远高于写入操作,比例可达到 100:1,甚至 1000:1。需要复杂的数据库联结的读取操作成本非常高,在磁盘操作上消耗了大量时间。

参见 细聊冗余表数据一致性 学习笔记

SQL调优

参见 MySQL 性能优化学习笔记
参见 MySQL 索引学习笔记

上一篇下一篇

猜你喜欢

热点阅读