金桔
金币
威望
贡献
回帖0
精华
在线时间 小时
|
恰好今天面试,遇到一个面试者,说自己参与了上家公司的系统优化,提高了50%的数据库效率,提到使用过的方法就是读写分离和分库分表。
那么读写分离是否可以提高所有的场景下的性能?或者说什么情况下适合,什么情况下不适合使用读写分离呢?聊聊个人的理解。
读写分离不是万金油,不见得所有的场景都合适。在读远远大于写,且对数据的实时性要求不是那么敏感的情况下,读写分离可以 提高程序的性能。其他情况甚至有相反的效果。
正例
首先,读写分离增加了物力服务器,主库负责写入,然后再同步到从库。负责写入的库不考虑读出,负责读出的不考虑写入,一定程度上减少了锁的争用。
其次,读写分离不仅仅可以分离出来一个只读库,你可以一个写库,然后拖多个只读库,把流量分布到多个读的库上面去。当然就大幅度的降低了每个数据库的负载。
反例
- 如果你读写分离用在了写大于读的情况下,每次写入数据库,都需要花费一些性能 同步到只读库。而只读库对分摊负载没有什么帮助。
- 如果你的系统对数据非常敏感,写入主库后异步发布到从库,从库一定有一定时间的差异。这个要考虑。
|
|