秋色园QBlog技术原理解析:性能优化篇:读写分离与文本数据库(十八)
上节 秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七) ,
秋色园 QBlog 对于频繁产生更新操作的访问计数器(用户表及文章表),进行了另一种优化方案处理,使得原来并发进行的操作,变成了定时的单个队列式顺序更新操作,有效的解决了计数器引发的并发的问题。
本节概要:
本节内容:
1:分析寻找优化点:
通过 CYQ.Data 的 AppDebug(即将发布的V4.5.5版本包含此类),打印出页面的SQL语句:
PS:关于打印页面SQL语句的优化,可见之前的文章:秋色园QBlog技术原理解析:性能优化篇:全局的SQL语句优化(十三)
首先观察页面这些语句,我们看到这里涉及到几条语句:
1:第一次的表架构获取语句,即where 1=2的语句
2:博客用户的信息读取语句
3:友情链接的语句
PS:如果没有缓存,当然还有很多和文章列表相关的语句,文章的下节重点再讲。
然后我对着这些语句寻思了很久时间,最后得出结论,得把这些语句消灭掉。
2:步步分析并对可优化点进行优化:
2.1:消灭表架构读取SQL语句
这个其实关系不大,因为一个表仅读一次,而且之后全局默认缓存30分钟,所以出现频繁非常低,不过了为追求首页0语句,我还是比较严肃的把它给消灭了,怎么消灭的?
消灭其实还是很好解决的,只要首次读取时,把表架构外置到文本中即可,于是架构的读取顺序就变成了:缓存->文本->数据库。
下面给一张表架构外置文本和架构外置架构示例图:
2.2:消灭用户信息的读取SQL语句
其实用户表是个大问题,经常也会出现的4K,因为有太多的语句,可涉及到用户表的读取。
为此,虽然说用户信息每次读取完后也会进行缓存,但是,用户数量比较多,搜索引擎来来回回,啥用户也会扯到,所以总体来来回回就变的读取相当相当的频繁,为此,我想了一想,把它给消灭了,怎么消灭的?
同理,第一次读取时,我把用户信息外置到文本了,然后用户后台更新数据的时候,也刷新文本。
然后读取自然的顺序就变成了:缓存->文本->数据库。
于是当然的,秋色园现在4000多的用户,就产生了4000多个文本了,看似规模很庞大!
难免有人要发出感叹,要是你100万用户,不就产生100万个文本了?我想说,求之不得啊!
下面给一张用户信息文本及用户信息以json格式存储的示例图:
2.3:消灭友情链接的读取SQL语句
用户的友情链接,比起用户信息来说,不算重点,不过你会发现,用户的每个页面可都是也有友情链接的。
所以,我打算把它也给灭了,怎么消灭的?
有了上面两步的经验,这步实施起来太easy了,同理,首次把用户的友情链接转存到文件中,然后读取就是文本读取了,后台修改的时候,也是读的文本的,不过写的时候,先写数据库,再写文本。
于是,4000多用户,也会产生4000多的友情链接的文本。
下面给一张友情链接的文本及友情链接列表以json格式存储的示例图:
2.4:文章列表的SQL语句呢?
这里必须严肃的说一下,大量的文章列表的SQL语句,并没有使用文本的方式进行消灭。
为啥没有呢?
原因也很简单,因为文章列表涉及到查询及排序还有分组等复杂语句,文本不太好操作这些事情。
那文章列表是如何进行的优化,这是个大工程,当时我在外散步连续思考了3天,也是秋色园QBlog 至今为止的最后一次优化,这么大工程,具体下节详细介绍了。
总结:
秋色园QBlog 通过借助于文本,将大量的读取数据库转移到文本读取中,有效的降低了数据库的压力,同时网站运行也顺畅了很多。
经过一场应用之后,对文本有了第一印象:
优点:速度快,小数据量(10万或10M上下)简单的存储与读取非常方便。
缺点:删除,更新,查询,分页,排序及并发控制等操作复杂,而且数据量也不适合太多。
另外据网上搜索“文本数据库”的结果看来:
文本数据库以前在php界很流行,多数论坛都采用文本数据库,而且抗并发能力相当强,当然这背后相信有一定的技术手段在处理,然后后来的后来,php基本都统一mysql了。
至于.net界,文本数据库却从没流行过,这是为什么呢?
历史文章回顾:
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并发上限
17:秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七) --介绍用户和文章访问的计数优化方案
附章:
1:秋色园QBlog技术原理解析:博客一键安装工具技术实现[附源码下载] --开源秋色园安装工具原理
PS:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427
版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:
http://www.cnblogs.com/cyq1162/archive/2011/08/07/2129785.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
小网站架构优化:从100并发抗到4000并发
前言: 很久前,在512M内存+Access的VPS里,写过了一个经典的秋色园技术原理解析系列。 后来的某一天,换上了1G内存+MSSQL2000,秋色园又跑过了一个多年头。 之后,秋色园和 CYQ.Data,也在一直默默的优化和改进,只是没写什么文章分享分享。 秋色园的架构,基本上从简单到复杂最后又回归简单,不断做着减法,去掉了好多以前用于减轻负载的算法,包括AOP+SQLite分压和文本分压等机制,还有一些缓存式算法。 好多时候,硬件不给力,这时候就会被逼着把整个系统架构复杂化。 一当硬件给力时,系统轻装上阵,架构可以更简单。 因为本质就是请求+返回(硬件能加速的,软件就不用搞太多算法了)。 下面在分享一下我记忆中还记得的秋色园关于负载测试的起缘: 1:某天,我发现秋色园CPU经常会跑满100%: 经过一年的岁月,不知觉的最终被我发现是搜索引擎引发的(虽然写过IIS日志分析工具,但是我自己都很少用,几乎没怎么用,一用没想到找到问题了)。 我发现秋色园的关键字(Tag),由于是直接链接到搜索,而搜索这块是全表的like搜索,没做缓存的优化,所以搜索引擎心情好时就把它弄挂菜了。 ...
- 下一篇
秋色园QBlog技术原理解析:性能优化篇:字节、缓存、并发(十二)
文章回顾: 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技术原理解析:页面内容填充及多语言翻译流程演示示例(十)--总结演示示例...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 2048小游戏-低调大师作品