2019独角兽企业重金招聘Python工程师标准>>>

上节概要:

上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六)  中,

介绍了 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技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程

3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL

4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序

5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建基类和自定义生命周期

6: 秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六) --介绍基类生命周期内部业务

7: 秋色园QBlog技术原理解析:Module之基类生命周期-页面加载(七) --介绍界面html加载原理

8: 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八) --介绍html的内容是如何填充

9: 秋色园QBlog技术原理解析:独创的多语言翻译机制(九) --介绍html多语言翻译原理

10:秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十) --总结演示示例代码

11:秋色园QBlog技术原理解析:页面Post提交机制(十一) --介绍如果Post提交数据

12:秋色园QBlog技术原理解析:性能优化篇:字节与缓存与并发(十二) --介绍性能优化:字节,并发及缓存

13:秋色园QBlog技术原理解析:性能优化篇:全局的SQL语句优化(十三) --介绍全局掌握SQL,进行针对性优化

14 :秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十四) --介绍二次缓存方案

15:秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)  --介绍内容分库减压

16:秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六) --介绍access并发上限

附章:

1:秋色园QBlog技术原理解析:博客一键安装工具技术实现[附源码下载] --开源秋色园安装工具原理

2:如何安装部署秋色园CYQBlog站点

3:Windows7下如何安装部署秋色园CYQBlog站点

PS:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427

转载于:https://my.oschina.net/secyaher/blog/274040

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

  1. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  2. 秋色园QBlog技术原理解析:性能优化篇:打印页面SQL,全局的SQL语句优化(十三)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  3. 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及超级分库分散并发方案(十六)...

    上节回顾: 上节 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五) 中, 介绍了 秋色园QBlog 在性能优化方面,从技术的优化手段,开始步入数据库设计优化,并从数据的 ...

  4. 秋色园QBlog技术原理解析:系列终结篇:最后的AOP策略(十九)

    2019独角兽企业重金招聘Python工程师标准>>> 开篇闲话: 好几个月没写文章了,从9月15号发布新浪"微博粉丝精灵"V1.0后,持续的几个月都在折腾它,现 ...

  5. 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  6. 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三)

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 本节,将从 ...

  7. 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四)

    2019独角兽企业重金招聘Python工程师标准>>> 文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技 ...

  8. 秋色园QBlog技术原理解析:开篇:整体认识(一)

    2019独角兽企业重金招聘Python工程师标准>>> 很多网友表示对 秋色园 的实现原理感兴趣,有很多人,问了很多问题,包括: 1:URL地址怎么没有后缀? 2:多语言是怎么实现的 ...

  9. 6、HIVE JDBC开发、UDF、体系结构、Thrift服务器、Driver、元数据库Metastore、数据库连接模式、单/多用户模式、远程服务模式、Hive技术原理解析、优化等(整理的笔记)

    目录: 5 HIVE开发 5.1 Hive JDBC开发 5.2 Hive UDF 6 Hive的体系结构 6.2 Thrift服务器 6.3 Driver 6.4 元数据库Metastore 6.5 ...

最新文章

  1. linux系统无线怎么设置密码,LINUX终端下配置WPA2加密无线网络
  2. 【NLP-ChatBot】我们熟悉的聊天机器人都有哪几类?
  3. 2.privite私有变量的意义
  4. 青岛大学计算机科学技术学院官网,田呈亮 - 青岛大学 - 计算机科学技术学院
  5. 微软内核工程师:ReactOS 剽窃了 Windows 研究内核代码!
  6. ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
  7. python进行接口请求,第一个接口返回的数据作为第二个参数的入参
  8. C语言线性表realloc增加空间,数据结构C语言实现系列——线性表
  9. 装双系统出现winload.efi,也就是安装win10,提示0xc0000359
  10. 【java】对象克隆protected Object clone() throws CloneNotSupportedException
  11. package 包名; ^ zip END header not found
  12. 五步帮你实现用户画像的数据加工
  13. 弗雷塞斯 从生物学到生物信息学到机器学习 转录组入门(3):了解fastq测序数据...
  14. J2EE总体的学习计划(百搜技术)
  15. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
  16. 网络安全2020.6.15作业
  17. whale 帷幄:营销自动化saas系统 saas营销系统是什么意思
  18. DoTween延时办法
  19. 解决linux系统网络时常断开的问题
  20. 中国人都应记住的“中国”一百句名言

热门文章

  1. CCF系列之画图(201409-2)
  2. Linux cp命令如何拷贝整个目录下所有文件
  3. Qt Installer Framework实战
  4. ODBC、OLE连接各种数据库的连接字符串
  5. sdut 2401 最大矩形面积
  6. 字符串的最大相似匹配
  7. Asp.Net中查询域名的Whois信息
  8. C/C++中“#”和“##”的作用和用法
  9. android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色
  10. php mysql execute语法_PHP PDOStatement::execute讲解