`

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

阅读更多

通常情况下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服务)去监视缓冲短消息的目录顺序的将短消息存储到数据库中。

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

1
3
分享到:
评论

相关推荐

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

    缓冲写数据可以避免在网站并发访问多的时候,数据库瞬间承受过大压力,而造成死锁或响应不及时的情况。 那么什么时候适合缓冲写呢?是不是所有情况都适用呢?缓冲写会导致数据在内存中或者web server硬盘或者第三方...

    ASP.NET完全入门

    第六篇“性能优化”—— ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲,在本篇中将围绕的这两种缓冲技术,进行详细的讲解。 第七篇“高级应用”——在高级应用一篇中,我们将介绍三个方面的内容:XML在...

    asp.net完全入门

     第六篇 “性能优化”—— ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲,在本篇中将围绕的这两种缓冲技术,进行详细的讲解。  第七篇 “高级应用”——在高级应用一篇中,我们将介绍三个方面的...

    《ASP.NET 完全入门》

     第六篇 “性能优化”—— ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲,在本篇中将围绕的这两种缓冲技术,进行详细的讲解。  第七篇 “高级应用”——在高级应用一篇中,我们将介绍三个方面的...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    ASP.NET 2.0技术内幕

    ·设计缓冲层,学习状态管理技术以优化应用程序性能 ·用成员关系控件、注册和认证功能来管理用户 ·用常用设计模板构建实际的数据访问层 ·通过数据源控件来使用定制集合 ·透视网格控件...

    asp.net教程

    <br> 第六篇 “性能优化”—— ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲,在本篇中将围绕的这两种缓冲技术,进行详细的讲解。 <br> 第七篇 “高级应用”——在高级应用一篇中,我们将...

    ASP.NET.2.0技术内幕.part3

    本书主题丰富,讲解透彻...·设计缓冲层,学习状态管理技术以优化应用程序性能 ·用成员关系控件、注册和认证功能来管理用户 ·用常用设计模板构建实际的数据访问层 ·通过数据源控件来使用定制集合 ·透视网格控件内幕

    ASP.NET.2.0技术内幕.part2

    微软技术丛书全书分三...·设计缓冲层,学习状态管理技术以优化应用程序性能 ·用成员关系控件、注册和认证功能来管理用户 ·用常用设计模板构建实际的数据访问层 ·通过数据源控件来使用定制集合 ·透视网格控件内幕

    ASP.NET.2.0技术内幕.part1

    微软技术丛书全书分三...·设计缓冲层,学习状态管理技术以优化应用程序性能 ·用成员关系控件、注册和认证功能来管理用户 ·用常用设计模板构建实际的数据访问层 ·通过数据源控件来使用定制集合 ·透视网格控件内幕

    增加asp.net应用程序性能的20种方法(简单有效)

    1.禁用session假如您用不到session会话跟踪请务必禁用它。您可以在每个asp.net页面中设置如下:<%...2.输出缓冲设置这个方法对你的应用很有帮助.asp.net应用程序基本上在服务器端批量生成数据

    方配网站管理系统(WMS) 5.10.zip

    另外,ASP.NET引擎采用.NET 类的自动装载和内存缓冲技术,共享程度高的.NET 类基本上直接从内存中调出,大大提高系统执行效率。 方配网站管理系统(WMS)内置多重Cache 高效率的缓存机制,网页先缓存于硬盘上,随后会...

    蓝焰设计站图文管理系统

    但是由于ASP本身的局限性使得系统有一些不可克服的缺陷,而采取了ASP.NET技术的系统性能上有了很大的改善,其主要表现在以下几方面: 1.由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics