数据库读写分离
读写分离是指:数据库master负责数据的写入操作,slave则负责数据的读取操作。当向master写入数据时,master通过复制将数据同步到从slave。这样便可以将读DB的访问压力分离出去,用于提升集群的性能。
但是由于主从间数据的复制有延迟,如下场景中则会带来一个问题:
1.向master中写入数据a
2.从slave中读取a
在1执行完后,由于master与slave之间的复制延迟导致master中的数据还没有同步给slave,如果此时2读取了slave中的a,那么读取的便是旧的数据,从而出现了数据不一致性。
通常,解决这个问题有以下几种选择:
1.写操作后紧接着的读操作指定向master,这样便可以读取到master中的最新的数据。
例如:小明存入了100块钱,存入后马上查询余额。在这个场景中,存入100块钱便是写master,接下来的查询操作,也定位给master,这样便可以查询到最新的余额。
2.读slave失败后,再读一次master。
例如:注册账号,然后马上登陆。在这个场景中,如果用户注册完账户,登陆时先从slave中查询是否存在该账号,如果不存在,则再次读取master获取账号信息。
3.关键信息读写均在master,非关键信息读在slave。
例如:用户账号信息读写都在master,评论等非关键信息的读可以放在slave中,因为评论信息即使读的是旧数据影响也不大。