web缓存

  • z2_569273
    了解作者
  • 163.4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-21 05:31
    上传日期
web缓存
Desktop.rar
  • Web应用的缓存设计模式 - robbin的自言自语_files
  • application.js
    1.9KB
  • 1(14)
    1.8KB
  • 1(18)
    3KB
  • 1(3)
    3.5KB
  • 1(1)
    1.7KB
  • 1(20)
    3.6KB
  • 1(16)
    4KB
  • transparent.gif
    48B
  • 1(23)
    1.6KB
  • 1
    3.2KB
  • highlight.min.js
    27.7KB
  • 1(12)
    2.7KB
  • 1(7)
    2.2KB
  • jquery-ujs.js
    2.9KB
  • 1(2)
    3KB
  • 1(4)
    2.7KB
  • app_iframe.css
    3.5KB
  • 1(5)
    1.8KB
  • jquery.js
    91.4KB
  • share_btn_iframe.js
    3.3KB
  • document.css
    1.9KB
  • github.min.css
    1.3KB
  • github.css
    9.4KB
  • 1(22)
    2.5KB
  • 1(6)
    1.6KB
  • 1(13)
    2.8KB
  • 1(15)
    2.6KB
  • 1(17)
    1.9KB
  • 1(19)
    3KB
  • 100.png
    12KB
  • 1(21)
    2.4KB
  • 1(9)
    1.9KB
  • 1(11)
    3.4KB
  • logo.png
    14.5KB
  • weiboshare.htm
    1.8KB
  • content.css
    19.4KB
  • 1(8)
    2.3KB
  • 1(10)
    2.2KB
  • Web应用的缓存设计模式 - robbin的自言自语.htm
    75.1KB
内容介绍
<!DOCTYPE html> <!-- saved from url=(0044)http://robbinfan.com/blog/38/orm-cache-sumup --> <html lang="zh-CN" data-find="_7"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Web应用的缓存设计模式 - robbin的自言自语</title> <meta name="description" content="ruby ## ORM缓存引言 从10年前的2003年开始,在Web应用领域,ORM(对象-关系映射)框架就开始逐渐普及,并且流行开来,其中最广为人知的就是Java的开源ORM框架Hibernate,后来Hibernate也成为了EJB3的实现框架;2005年以后,ORM开始普及到其他编程语言领域,其中最有名气的是Ruby on rails框架的ORM - ActiveRecord。如今各种开源..."> <meta name="author" content="Robbin Fan"> <link href="http://robbinfan.com/rss" rel="alternate" title="robbin的自言自语" type="application/rss+xml"> <link href="./Web应用的缓存设计模式 - robbin的自言自语_files/document.css" media="screen" rel="stylesheet" type="text/css"> <link href="./Web应用的缓存设计模式 - robbin的自言自语_files/content.css" media="screen" rel="stylesheet" type="text/css"> <link href="./Web应用的缓存设计模式 - robbin的自言自语_files/github.css" media="screen" rel="stylesheet" type="text/css"> <link href="./Web应用的缓存设计模式 - robbin的自言自语_files/github.min.css" media="screen" rel="stylesheet" type="text/css"> </head> <body data-find="_6"> <div id="flash-notice"></div> <div class="header"> <div class="wrap"> <div class="user_img"></div> <div class="blog_title">robbin的自言自语</div> <div class="write"> <a href="http://robbinfan.com/login" rel='nofollow' onclick='return false;'>登录</a> </div> <div class="blog_motto">Small is beautiful, constraint is liberty.</div> </div> </div><!-- header --> <div class="nav"> <div class="wrap clearfix"> <div class="search fr"> <form action="http://robbinfan.com/search" id="cse-search-box" method="get"> <input type="hidden" name="cx" value="007540752216561218107:cgbwg20yn_o"> <input type="hidden" name="cof" value="FORID:10"> <input type="hidden" name="ie" value="UTF-8"> <input id="search-box" name="q" type="text" placeholder="Search" value=""> <button id="search-button"></button> </form> </div> <ul> <li><a href="http://robbinfan.com/" rel='nofollow' onclick='return false;'>首页</a></li> <li><a href="http://robbinfan.com/blog" rel='nofollow' onclick='return false;'>博客</a></li> <li><a href="http://robbinfan.com/note" class="current" rel='nofollow' onclick='return false;'>笔记</a></li> <li><a href="http://robbinfan.com/tag" rel='nofollow' onclick='return false;'>分类</a></li> <li><a href="http://robbinfan.com/weibo" rel='nofollow' onclick='return false;'>微博</a></li> <li><a href="http://robbinfan.com/blog/28/about-robbin" rel='nofollow' onclick='return false;'>关于</a></li> </ul> </div> </div><!-- nav --> <div class="wrap clearfix" data-find="_5"> <div class="left" data-find="_4"> <div class="con" data-find="_3"> <div class="content" data-find="_2"> <div class="tit clearfix"> <span class="note_icon" title="学习笔记"></span> <h1><a href="./Web应用的缓存设计模式 - robbin的自言自语_files/Web应用的缓存设计模式 - robbin的自言自语.htm" rel='nofollow' onclick='return false;'>Web应用的缓存设计模式</a></h1> <a class="markdown" title="Markdown格式原文" href="http://robbinfan.com/blog/38/orm-cache-sumup.md" rel='nofollow' onclick='return false;'></a> </div> <div class="info clearfix"> <a class="tag" rel="tag" href="http://robbinfan.com/tag/ruby" rel='nofollow' onclick='return false;'><span>ruby</span></a> </div> <div class="text" data-find="_1"> <h2>ORM缓存引言</h2> <p>从10年前的2003年开始,在Web应用领域,ORM(对象-关系映射)框架就开始逐渐普及,并且流行开来,其中最广为人知的就是Java的开源ORM框架Hibernate,后来Hibernate也成为了EJB3的实现框架;2005年以后,ORM开始普及到其他编程语言领域,其中最有名气的是Ruby on rails框架的ORM - ActiveRecord。如今各种开源框架的ORM,乃至ODM(对象-文档关系映射,用在访问NoSQLDB)层出不穷,功能都十分强大,也很普及。</p> <p>然而围绕ORM的性能问题,也一直有很多批评的声音。其实ORM的架构对插入缓存技术是非常容易的,我做的很多项目和产品,但凡使用ORM,缓存都是标配,性能都非常好。而且我发现业界使用ORM的案例都忽视了缓存的运用,或者说没有意识到ORM缓存可以带来巨大的性能提升。</p> <h2>ORM缓存应用案例</h2> <p>我们去年有一个老产品重写的项目,这个产品有超过10年历史了,数据库的数据量很大,多个表都是上千万条记录,最大的表记录达到了9000万条,Web访问的请求数每天有300万左右。</p> <p>老产品采用了传统的解决性能问题的方案:Web层采用了动态页面静态化技术,超过一定时间的文章生成静态HTML文件;对数据库进行分库分表,按年拆表。动态页面静态化和分库分表是应对大访问量和大数据量的常规手段,本身也有效。但它的缺点也很多,比方说增加了代码复杂度和维护难度,跨库运算的困难等等,这个产品的代码维护历来非常困难,导致bug很多。</p> <p>进行产品重写的时候,我们放弃了动态页面静态化,采用了纯动态网页;放弃了分库分表,直接操作千万级,乃至近亿条记录的大表进行SQL查询;也没有采取读写分离技术,全部查询都是在单台主数据库上进行;数据库访问全部使用ActiveRecord,进行了大量的ORM缓存。上线以后的效果非常好:单台MySQL数据库服务器CPU的IO Wait低于5%;用单台1U服务器2颗4核至强CPU已经可以轻松支持每天350万动态请求量;最重要的是,插入缓存并不需要代码增加多少复杂度,可维护性非常好。</p> <p>总之,采用ORM缓存是Web应用提升性能一种有效的思路,这种思路和传统的提升性能的解决方案有很大的不同,但它在很多应用场景(包括高度动态化的SNS类型应用)非常有效,而且不会显著增加代码复杂度,所以这也是我自己一直偏爱的方式。因此我一直很想写篇文章,结合示例代码介绍ORM缓存的编程技巧。</p> <p>今年春节前后,我开发自己的个人网站项目,有意识的大量使用了ORM缓存技巧。对一个没多少访问量的个人站点来说,有些过度设计了,但我也想借这个机会把常用的ORM缓存设计模式写成示例代码,提供给大家参考。我的个人网站源代码是开源的,托管在github上:<a href="https://github.com/robbin/robbin_site" rel='nofollow' onclick='return false;'>robbin_site</a></p> <h2>ORM缓存的基本理念</h2> <p>我在2007年的时候写过一篇文章,分析ORM缓存的理念:<a href="http://robbinfan.com/blog/3/orm-cache" rel='nofollow' onclick='return false;'>ORM对象缓存探讨</a> ,所以这篇文章不展开详谈了,总结来说,ORM缓存的基本理念是:</p> <ul> <li>以减少数据库服务器磁盘IO为最终目的,而不是减少发送到数据库的SQL条数。实际上使用ORM,会显著增加SQL条数,有时候会成倍增加SQL。</li> <li>数据库schema设计的取向是尽量设计 <em>细颗粒度</em> 的表,表和表之间用外键关联,颗粒度越细,缓存对象的单位越小,缓存的应用场景越广泛</li> <li>尽量避免多表关联查询,尽量拆成多个表单独的主键查询,尽量多制造 <code>n + 1</code> 条查询,不要害怕“臭名昭著”的 <code>n + 1</code> 问题,实际上 <code>n + 1</code> 才能有效利用ORM缓存</li> </ul> <h2>利用表关联实现透明的对象缓存</h2> <p>在设计数据库的schema的时候�
评论
    相关推荐