Asp.Net 网站性能优化之缓字决 (上) 缓冲写数据

 更新时间:2010年06月09日 20:40:56   作者:   我要评论
通常情况下Asp.Net 网站的底层数据存储都是关系数据库,关系数据库资源比较昂贵,而且也很容易造成瓶颈。缓字决文章就是为大家介绍如何有效使用缓存,异步写缓冲数据库的压力,从而保证网站的性能。
大家已经看到很多关于Asp.Net缓存的文章了。所以我写的时候要改变一下思路,从缓冲写数据开始说起。缓冲写数据的意思是在数据需要更新时不马上把数据存到数据库,而是先缓冲一下,然后在适当的时机再写入到数据库中。

缓冲写数据可以避免在网站并发访问多的时候,数据库瞬间承受过大压力,而造成死锁或响应不及时的情况。

那么什么时候适合缓冲写呢?是不是所有情况都适用呢?缓冲写会导致数据在内存中或者web server硬盘或者第三方存储中驻留一段时间,在这段时间内如果从数据库中查询最新数据的话,会有遗漏。大多数事物都有两面性,我们需要学会趋利避害;换句话说在保证缓冲写不会导致用户感觉数据缺少的情况下,或者在使用适当措施不让用户感觉数据缺失的情况下就可以使用缓冲写。我有两个具体的实例来介绍如何使用缓冲写:

1. Pv(页面浏览量)统计,大多数网站都有这个功能,有些网站还专门做这个服务
  网站每有一个页面被浏览时,就会需要给对应页面的Pv+1;这种情况下,如果直接更新到数据库中,访问量稍微大一些就会造成数据库压力过大的问题。

  所以我们需要对Pv计数做缓冲,在单web server的情况下我们可以在内存中维护一个hashtable,然后用一个异步的线程去定时扫描这个hashtable,当点击数达到“一定数字”时更新到数据库。听上去很简单,不过也需要一个小技巧,上一句话中说的“一定数字”四个字不能是随便的一个数字,如果它是4,试想一下会出现什么情况,我们的所有Pv数都会是4的倍数,用户会怀疑我们是不是在Pv上造假了;我们没有造假却留下了造假的迹象!这个“一定数字”必须是一个素数,我们可以取7,也可以用13,如果我们的访问量很大也可以取23或31;这样就不会出现“造假的迹象”了。

2. 发送站内短消息
  站内短消息也是一个比较通用的模块,他可以说是一种离线消息,并非im即时消息,所以我们可以利用这个业务特性,  来对发消息做下缓冲。当有短消息发送时我们可以先将这个短消息放到硬盘文件中,然后很快的响应用户,在ui上告诉用户,你的消息已经发出去了,然后我们可以用另一个线程(或者做一个windows服务)去监视缓冲短消息的目录顺序的将短消息存储到数据库中。

以上两个场景都是比较经典的利用缓冲写的例子,在现实中需要我们去具体分析业务和某个业务是否会造成数据库压力来决定是否缓冲写,如果业务本身对数据库的压力就很小,那当然就没必要考虑了,反之如果业务压力较大我们就需要做一些工作避免缓冲写的问题并利用缓冲写。

请尊重作者的劳动,转载请保留链接 玉开的技术博客

相关文章

  • MVC4制作网站教程第四章 前台栏目浏览4.5

    MVC4制作网站教程第四章 前台栏目浏览4.5

    这篇文章主要为大家详细介绍了MVC4制作网站教程,前台栏目浏览功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • ASP.NET中集成百度编辑器UEditor

    ASP.NET中集成百度编辑器UEditor

    本文给大家讲解的是如何在ASP.NET中集成百度编辑器UEditor的方法和具体的步奏,十分的详细,有需要的小伙伴可以参考下。
    2015-06-06
  • ASP.NET MVC5网站开发概述(一)

    ASP.NET MVC5网站开发概述(一)

    这篇文章主要内容是ASP.NET MVC5网站开发实践的整体概述,分析了开发环境、使用的技术以及项目的整体结构,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • ASP.NET文件上传Upload的实现方法

    ASP.NET文件上传Upload的实现方法

    这篇文章主要为大家详细介绍了ASP.NET文件上传的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • asp.net动态加载用户控件,关于后台添加、修改的思考

    asp.net动态加载用户控件,关于后台添加、修改的思考

    一直以来,我都在思考,一些繁琐的操作,比如我们一般的管理后台,很多都是数据的添加、修改与删除,列表的操作,而且一般我们都是用.aspx文件去做的。
    2009-04-04
  • asp.net实现的群发邮件功能详解

    asp.net实现的群发邮件功能详解

    这篇文章主要介绍了asp.net实现的群发邮件功能,结合具体实例形式分析了asp.net基于SMTP服务群发QQ邮件的相关操作技巧与注意事项,需要的朋友可以参考下
    2017-05-05
  • ASP.NET MVC使用Ninject的方法教程

    ASP.NET MVC使用Ninject的方法教程

    这篇文章主要给大家介绍了关于ASP.NET MVC使用Ninject的相关资料,文中通过示例代码介绍的非常详细,对大家啊的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • ASP.NET中用js取CheckBoxList中值的方法实例

    ASP.NET中用js取CheckBoxList中值的方法实例

    用脚本取CheckBoxList中的值,并用"|"将其分开,之后将取到的值放入文本框,返回数据库做添加或者修改
    2013-07-07
  • asp.net 特定目录form验证

    asp.net 特定目录form验证

    前几听我的一个同事说form验证,我也只是听说过,说是一个很简单的验证,最近也在做一个小型的企业网站(因为刚进公司不久,老板就给了单独一个小项目练练手)。
    2009-06-06
  • asp.net GridView排序简单实现

    asp.net GridView排序简单实现

    使用javascript操作table排序才是实用的排序,这样排序不怎么好,但是有时候可能会用来,记录一下。
    2009-12-12

最新评论