zoukankan      html  css  js  c++  java
  • 数据库读写分离和数据一致性的冲突

    读写分离: 为保证数据库数据的一致性,我们要求所有对于数据库的更新操作都是针对主数据库的,但是读操作是可以针对从数据库来进行。大多数站点的数据库读操作比写操作更加密集,而且查询条件相对复杂,数据库的大部分性能消耗在查询操作上了。

    主从复制数据是异步完成的,这就导致主从数据库中的数据有一定的延迟,在读写分离的设计中必须要考虑这一点。以博客为例,用户登录后发表了一篇文章,他需要马上看到自己的文章,但是对于其它用户来讲可以允许延迟一段时间(1分钟/5分钟/30分钟),不会造成什么问题。这时对于当前用户就需要读主数据库,对于其他访问量更大的外部用户就可以读从数据库。

    适当放弃一致性:在一些实时性要求不高的场合,我们适当放弃一致性要求。这样就可以充分利用多种手段来提高系统吞吐量,例如页面缓存、分布式数据缓存、数据库读写分离、查询数据搜索索引化。
    可以通过程序控制,将强一致性要求的功能(比如存钱、取钱)的读写操作均指向主数据库,或者将写操作采用“双写”的方式实现;而弱一致性(最终一致性)要求的功能(比如更新微博(写)、金融查询账户(读))实现读写分离。
     

    因此:

    我的想法是要使用读写分离来实现系统吞吐量的提升就要从业务上想办法降低一致性的要求。

    对必须要有一致性的功能是无法进行读写分离的,可以采用多库不区分读写以及memcache缓存技术来实现。




  • 相关阅读:
    称重量
    计算机网络
    进程间的通信方式与区别
    求两IP是否在同一局域网(运子网掩码用)
    Linux Redhat7 磁盘阵列基本原理
    Linux Redhat7更改root用户密码
    更改Linuxshell类型
    linux系统下的/var/spool/mail/root
    centos 解决"不在 sudoers 文件中。此事将被报告
    redhat 7 安装图形界面
  • 原文地址:https://www.cnblogs.com/findbetterme/p/10820590.html
Copyright © 2011-2022 走看看