秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

简介:
介绍了 Access的并发上限,及从某种程度上  秋色园QBlog  针对并发上限进行了多个数据的划分,从而最大并发上限从64提升到64*N(个数据库),虽然总和的最大并发值是上升了,但是单个库的最大值并没有变化,或者说单个表的最大并发值没有发生变化,上限仍是64。
于是,对于频繁产生更新操作的访问计数器(用户表及文章表),是该进入优化的方案了。
 
本节概要:
 
本节将介绍秋色园  QBlog  的在用户和文章计数器上的优化方案。
 
节内容:
 
秋色园QBlog 原来的访问计数器策略:
1:获取缓存的计数器数数字。[用户取值缓存,文章取值页面上的数字]
2:根据Session或Cookie对每个用户在某时间段间只计一次访问的判断。
3:在获取的数字上,进行内存计数+1。
4:概率性直接更新到用户表和文章表中。
 
这种方案,会否产生黄金4K的ldb问题,取决于访问量和概率性问题,概率值设置的越低,越安全,但是如果内存回收很频繁,丢失数字也常见。
 
色园QBlog 新的访问计数器优化策略:
1:仍旧保留内存计数器+1的方式。
2:概率性更新,变成统一 内置线程定时更新。
这样处理,原来概率性可能产生的并发更新问题,现在变成1个链接在更新,有效的减少黄金4K的问题。
3:为了减少丢失的概率,新开了数据库( qblogvisit.mdb)及数据表:
新开有两个表: Blog_UserVisit和Blog_ContentHit。
新开表的字段: ID和Hits
这个新库的两个表,加大了更新的频率,用于物理保存用户或文章的计数器,避免内存数字丢失的概率,当内存数字丢失时,先从这新表中取出原始数字,再进行+1,有效的减少数字丢失的问题。
 
PS:内置线程:是一件比较危险的事情,会产生比较想象还多的问题,需要全方位的处理可能产生的:并发,(应用程序池回收时)产生多个线程,异常等问题。
 
开启内置线程的代码:
 
静态页面动态显示计数器数字
首先:秋色园 QBlog 的页面多数是静态化的*.html,可是你会发现文章的计数器,无论是首页,列表,还是文章页,都是变化的,如何将静态化的数字,动态的变化显示?
用js异步?no..秋色园QBlog整站是无js的,如果有js,应该会是另一种实现方式。
然后:由于URLRewrite遇到请求时并非直接转向*.html,而是全转向*.ashx,再加载*.html方式,使的后台程序可以对静态化的html进行二次处理。
其实:如果你看过本系列的文章,应该会发现一个:Page_OnCache的生命周期,就是在这里动的手脚。
因此:只要获取列表上的数字,然后再从内存中寻找有没有相应的数字,有则更新。
结果:这样访问计数器的数字就是动态时时显示了。
 
显示动态数字的代码:
 
总结
 
本节通过将频繁产生数据库交互动作的计数器部分,变成单线程的更新,有效的解决了黄金4K问题。
同时为了减少数字丢失的概率,增加了新的数据库来物理存储文章的数字,但是不改变原有表的结构。
结果:在计数器这块,目前问题算是解决了。
但是,黄金4K的问题,并没有结束,因为,除了写操作,更多的是读取操作。
正如上节所说:
CYQ.Data 用Lock锁住插入/更新/删除,这些步骤,使的同一时间只出现一个链接打开。
但是,通过上节的示例,发现了,读取,也是要打开链接的。
因此,优化仍没有止步,本系列仍在继续,请继续关注。
 
历史文章回顾:
1:  秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用
2:  秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程
4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序
5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建基类和自定义生命周期
12: 秋色园QBlog技术原理解析:性能优化篇:字节与缓存与并发(十二) --介绍性能优化:字节,并发及缓存
附章:
 
 




     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/617146 ,如需转载请自行联系原作者





相关文章
|
2月前
|
机器学习/深度学习 前端开发 Windows
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
32 0
|
4月前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
4月前
|
C++ Python
部分仍在编辑文章 - Python基础专题 - 深度解析python中的赋值与拷贝
部分仍在编辑文章 - Python基础专题 - 深度解析python中的赋值与拷贝
29 0
|
1月前
|
SQL 关系型数据库 MySQL
一篇文章解析mysql的 行转列(7种方法) 和 列转行
一篇文章解析mysql的 行转列(7种方法) 和 列转行
511 0
|
4天前
|
消息中间件 Linux 测试技术
【xenomai3内核解析】系列文章大纲
该博客系列详细解析了Linux实时操作系统框架Xenomai,包括实时操作系统的概念、Linux为何非实时、嵌入式实时Linux方案等。内容涵盖Xenomai内核构建、组件结构、源码介绍、实时性测试及接口应用。此外,深入探讨了双核基石IPipe、系统调用、时间子系统、任务管理、同步与互斥、内存管理、信号处理、实时IPC、POSIX IPC、实时驱动模型RTDM、Rtnet、用户态实时库libcobalt和实时性能优化等方面。适合对Linux实时系统感兴趣的读者学习研究。
11 0
【xenomai3内核解析】系列文章大纲
|
8天前
|
传感器 vr&ar 计算机视觉
增强现实(AR)技术原理深度解析
【5月更文挑战第5天】本文深度解析了增强现实(AR)技术原理,包括图像识别与跟踪、三维注册技术和显示技术,并探讨了AR在游戏、教育、工业和医疗等领域的广泛应用。尽管面临准确性、成本和隐私等挑战,但随着技术进步,AR将在更多领域发挥关键作用,展现其潜力和价值。
|
20天前
|
存储 算法 Java
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
47 3
|
21天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
10 0
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
|
1月前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
2月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
98 0

推荐镜像

更多