• [转]主从复制:如何保持读写一致性


    问题:

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

    回答:

    STEP1:优化数据库
    1、将数据库体积定时的清理保持苗条的身材。
    2、表要尽量简单,关系不要太复杂,尽量不要太多索引。

    STEP2:优化程序
    1、利用客户端缓存,减少对数据库的反复读取,当用户读取一次评论之后便将评论信息写入本地cookie,当用户在一段时间内不停刷新页面的时候,就不让他再读数据库了直接去cookie里面取数据。添加到数据库数据成功的同时也返回数据告诉客户端也添加到cookie里面去。这样用户就知道他自己成功评论了,而且不论他怎么刷都伤不到服务器。
    2、利用缓存服务器的缓存,减少对数据库的反复读取,和cookie差不多,只不过是存在了服务器的内存里面。这样比读数据库快,但是需要注意这种情况下,如果用户玩命的刷,服务器还是很伤。就算是读内存还是得读服务器的东西。
    3、没必要将所有的评论都放在数据库里,如果评论太多太久远的没有意义的就删了吧。或者干脆静态化了得了,减少数据库的体积。
    4、关于同一时间并发的评论,直接先不写数据库,先全写到内存里去合并数量,然后按照数据库能接受的节奏,写进数据库。其实这个也是治标不治本,真正的洪流来了,怎么优化都没用。直接封IP吧。

    STEP3:提升配置(治标不治本)

    大招:
    告诉用户他的数据已经提交,但是服务器更新需要一定的时间,请不要着急等30秒后刷新看看。这招最简单,根本就不用什么程序。

    参考链接:

    https://bbs.aliyun.com/read/231556.html?page=e

  • 相关阅读:
    转C#线程调用带参数的方法 ~
    转在本地计算机无法启动oracledbconsole服务。错误1053:服务没有及时响应启动或控制请求
    转对Oracle10修改机器名后服务无法启动的解决
    转Spring.net web.config配置文件(经过整理和修改)
    转C#修饰符
    IP地址比较方法
    [转贴]关于XmlDocument 和 XPathDocument
    javascript下调用正则表达式的方法
    bug小结
    SQL Cache Dependency
  • 原文地址:https://www.cnblogs.com/gudi/p/5622232.html
Copyright © 2020-2023  润新知