文章目录数据库读写分离序言读写分离解决问题主从同步延迟选择性读写主库缓存路由总结
关于数据库读写分离序言
公司目前的项目都是单个数据库,现在的规模不是很大,单个数据库的性能也基本上能够满足需求。 为了应对未来用户增长带来的数据库瓶颈,上级需要了解以下数据库读写隔离: 以下是我知道后的总结。
读写分离解决的问题读写分离需要一个主数据库和多个从数据库,主数据库和从数据库之间通过数据库的主从复制进行同步。 主数据库负责写入,多个从数据库负责读取,从而实现读写分离。
读写分离适用于读取操作比写入操作多、对数据完整性要求不高的业务,通过从多个数据库分担读取操作来提高并发性。
分离读写不会缓解写作压力。 主库仍然负责所有写入操作,并且库也承受相同的写入压力,但库的写入操作是异步的。
由于主从同步延迟写入的数据在从主数据库同步到数据库之间存在延迟,因此我们读取的数据将是旧数据。 解决数据不匹配的方法有很多,必须根据业务需要选择合适的方式。 在以下情况下有解决办法:
在选择性读取主库的实际业务中,并不是所有业务都需要保证数据的一致性,大多数业务都可以接受临时数据不一致性。 因此,在业务不能容忍数据不一致的情况下(例如,用户进行购买操作,发生了余额不一致的情况下),能够读写的是主库,没有数据不一致的问题。 如果业务可以接受数据不匹配(例如,查询用户信息、查询订单等不影响公司利益的业务),则可以直接从库中阅读。 因为如果用户发现信息不匹配,将再次更新查询,并在经过较短的主从同步延迟后匹配数据。
当进行缓存根写入时,可以生成操作密钥,将该密钥保存到缓存中,并设置有效时间(主从同步延迟时间根据经验设置)。 每次进行读取操作时,检查key是否存在,如果存在,读取主库,如果不存在,读取从库。
在这种方法中,key的有效时间非常重要。 如果有效时间太长,大多数读取操作都将被赋予主库,最后的读取和写入由主库承担,不再对库有任何作用。 有效时间太短,无法避免数据不一致时。
总结对数据要求高度一致性的业务,读写分离不会提高并发性,而是通过主从同步和数据一致性保证机制降低并发性。 只有在项目读取操作导致数据库瓶颈,且对数据不一致的容忍程度较高时,才能通过将读和写分开并从多个库分担读取操作来提高业务的并发性能。
在数据完整性高且读写操作集中的业务中,可以通过划分表来提高业务的并发性能。