高并发论坛设计
时间:2010-12-31
来源:互联网
大家讨论下并发量很高的论坛设计方案:
我先说下我的想法:
关于并发数很高而实事性不是很重要的网站我往往会选择页面静态化在一段时间内输出的都一样这样可以大大的减少数据库查询的压力 当然增删改是对数据库实事操作的
但是对于论坛这种实时性要非常高的网站该如何设计才合理呢
我先说下我的想法
由于我是.NET的
使用Remoting单例模式建立Wimdows服务 服务里使用 HttpRuntime.Cache 作为缓存机制 当然不止一个服务 会根据能划分的模块分多个服务每个服务维护自己的一块缓存数据 (缓存DateTable)
下面是最重要也是最难的一部分 要让缓存跟数据库里同步
比如对一个模块里数据要更新 首先要去更新缓存里的数据 类似于数据库里的触发器一样 首先要确保数据库里顺利更新了再去更新缓存
要保证数据库里成功更新着谁都能做到 但是如何去更新缓存呢
马上肯定会这么想 先把数据从缓存里取出来再做处理再放进去 是的 没有错但是有没有想过 在你把数据取出来做好更新操作的同时有一个会话正好更新好正在往缓存里放 而就在瞬间你正好在做刚刚的操作 你取出来的数据可能是旧的你更新成功了却丢失了刚刚的那一步操作
DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 取出缓存数据
//对缓存数据做出来
HttpRuntime.Cache["cc"] = dt;
但是DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 得到的却是旧的数据 你在做对这个缓存处理之后再填充
HttpRuntime.Cache["cc"] = dt;的时候就丢失了上一次更新完却还未填充的那个的数据因为在你取数据的瞬间它正在填充而没有完成 此时就造成了有些数据没有跟数据库同步
很简单大家都会想到在取,更新数据的时候把这些数据锁住
lock(object)
{
``DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 取出缓存数据
``//对缓存数据做出来
``HttpRuntime.Cache["cc"] = dt;
}
这样做虽然数据能同步了 但是大大减小的并发量 可能会造成长时间的等待
但是我看到像CSDN这种论坛在你跟帖的时候他会在5秒后才显示出来 是否为了这种等待....
当然我不知道CSDN是怎么做缓存机制的
以上只是我的一些观点
望路过的大家来讨论讨论对于高并发而实时性又要很强的网站如何合理的实际能达到对数据库的减压
我先说下我的想法:
关于并发数很高而实事性不是很重要的网站我往往会选择页面静态化在一段时间内输出的都一样这样可以大大的减少数据库查询的压力 当然增删改是对数据库实事操作的
但是对于论坛这种实时性要非常高的网站该如何设计才合理呢
我先说下我的想法
由于我是.NET的
使用Remoting单例模式建立Wimdows服务 服务里使用 HttpRuntime.Cache 作为缓存机制 当然不止一个服务 会根据能划分的模块分多个服务每个服务维护自己的一块缓存数据 (缓存DateTable)
下面是最重要也是最难的一部分 要让缓存跟数据库里同步
比如对一个模块里数据要更新 首先要去更新缓存里的数据 类似于数据库里的触发器一样 首先要确保数据库里顺利更新了再去更新缓存
要保证数据库里成功更新着谁都能做到 但是如何去更新缓存呢
马上肯定会这么想 先把数据从缓存里取出来再做处理再放进去 是的 没有错但是有没有想过 在你把数据取出来做好更新操作的同时有一个会话正好更新好正在往缓存里放 而就在瞬间你正好在做刚刚的操作 你取出来的数据可能是旧的你更新成功了却丢失了刚刚的那一步操作
DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 取出缓存数据
//对缓存数据做出来
HttpRuntime.Cache["cc"] = dt;
但是DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 得到的却是旧的数据 你在做对这个缓存处理之后再填充
HttpRuntime.Cache["cc"] = dt;的时候就丢失了上一次更新完却还未填充的那个的数据因为在你取数据的瞬间它正在填充而没有完成 此时就造成了有些数据没有跟数据库同步
很简单大家都会想到在取,更新数据的时候把这些数据锁住
lock(object)
{
``DateTable dt = HttpRuntime.Cache["cc"] as DateSet; 取出缓存数据
``//对缓存数据做出来
``HttpRuntime.Cache["cc"] = dt;
}
这样做虽然数据能同步了 但是大大减小的并发量 可能会造成长时间的等待
但是我看到像CSDN这种论坛在你跟帖的时候他会在5秒后才显示出来 是否为了这种等待....
当然我不知道CSDN是怎么做缓存机制的
以上只是我的一些观点
望路过的大家来讨论讨论对于高并发而实时性又要很强的网站如何合理的实际能达到对数据库的减压
作者: 65300297 发布时间: 2010-12-31
不懂
作者: justforregister 发布时间: 2011-01-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28