鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站制作教程 > >

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

来源:互联网 作者:佚名 时间:2013-08-26 06:04
开篇闲话:好几个月没写文章了,从9月15号发布新浪“微博粉丝精灵”V1.0后,持续的几个月都在折腾它,现在都折腾到V3.4版本了。因此,本篇迟来了三个月了,同时

开篇闲话:

好几个月没写文章了,从9月15号发布新浪“微博粉丝精灵”V1.0后,持续的几个月都在折腾它,现在都折腾到V3.4版本了。

因此,本篇迟来了三个月了,同时,本篇也是本系列的最后一篇了,也是秋色园最后杀手锏,霸气总该是要外露的。

 

上节回顾:

上节  秋色园QBlog技术原理解析:性能优化篇:读写分离与文本数据库(十八),

秋色园 QBlog 将一些简单频繁的数据,借用文本外储,来分减一些压力,从而为并发降温,保障网站的顺利运行。

 

本节概要:

文本外储,在一定程序上解决了问题,但是,由于当时技术的薄弱,文本存储无法处理查询排序等问题,导致主体文章表依旧存在access黄金4K问题。

在压力之下,又要处理查询排序等复杂动作,于是苦冥三日,终得一招。

最后的招数:Access与SQLite合体,最后的AOP策略。

 

本节内容[AOP+数据库组合+策略分析+最终实现]:

 

一:CYQ.Data 数据框架中的AOP思路简述

 

1:关于最早期CYQ.Data数据框架实现AOP的思想文章,见:AOP 你想干什么 IOC 你服务什么

2:简单的再描述一下:

CYQ.Data数据框架通过在内部所有数据库的操作方法中,内置2两个AOP方法,来实现方法的拦截调整,简单的方法体如下:

通过这样的简单的拦截,可以轻松的在数据库操作前,先处理事情,在数据库操作后,再处理事情。

详情代码可下载:CYQ.Data V3.0 免费开源版本。

 

二:QBlog数据库的决择

 

首先:秋色园主体数据库是Access,当然是近乎每个表1个数据库,因此,是多个access数据库。

然后:秋色园再伴随着“文本数据库”,来分压一些简单读写的数据。

最后:决择是SQLite数据库,以分压用户的文章压力(没事多体验下其它数据库)。

目前秋色园的内存情况是:VPS总体是512M内存。

秋色园QBlog占用200M以下内存。

微博粉丝精灵占用200M以下内存。

系统默认开销也得占用200M左右。

剩下渣都没的剩了,连“爱说说”也因内存不足,暂时停掉了,当然不可能选用其它大型数据库了。

 

三:实际场景的考虑

 

秋色园是一个多用户博客,而博客系统,每一个用户的数据,基本上是相互独立的,简单的说:多用户可以化整为0,变成无数个单用户博客,然后无数个单用户博客,组合起来,就变成多用户博客。

曾经有这么一种设想:

1:有那么一个数据挂靠平台,博客只要有一份即可。

2:当我来到其它平台交流时,我只要选择授权挂靠就好了。

是不是有点像微博?博客园发展为数据平台,像51cto,csdn等,只要变成API开发者平台就行了,授权后数据直接对接过去,也省的两边发文章,是不?

因此,如果让我重新设计一个新的博客系统,我可能会考虑[单]用户组装形式,这样方便数据独立[进行外挂、内接、或私有成独立单用户博客系统]。

想的有点多,回到正常的思路上考虑:

基于“文本数据库”减压方案的延申,如果,把每个用户的文章独立分散,而每个用户的文章又能自由的查询排序,最终的效果就是:为每个用户建一个sqlite数据库文件保存数据。

这样的话,等于每个用户产生一个1个独立数据库,因此,除了首页,其它访问都变成了单用户博客系统,基本上也就没什么压力了。

 

想归这么想,总会带来一些疑问的:

1:数据库文件会不会产生太多?

其实也不多,十万个文件不算啥,按下日期、用户ID、哈唏、用户名等多种方式分布到不同文件夹下,一个文件夹也顶不了多少个文件。再说,有10万用户你都超越博客园了,估计开始偷笑了。

2:聚合内容怎么办?如网站首页聚合多个用户的文章显示?

这个没啥,因为除了每个用户独立的数据库文件,还有总的access数据库,聚合时读access即可。

3:这么说数据变成一式两份?

这个没错,是成两份了,不过目前策略,文章的内容(数据比较多)独立仅1份,因此占不了多少空间

4:两个数据库,如何同步?同时写两份?

写两份是要,当然就不可能同时写了,因为同时写,对原来的access还是存在多用户并发操作,具体看下面的详情。

5:这样系统不会变的很乱吧?

“最后的AOP策略”以插件的方式处理这种问题,一插,搞定,美国服务器,一拔,还是正常的,所以对系统完全不影响。

 

四:最后的AOP策略的实现

 

1:创建新的项目,开始AOP切换项目。

由于AOP内置以反射调用DLL插件式注入,因此原有逻辑代码不改变,只要开新的项目处理即可。

然后配置文件配置一下相关的调用即可,各家实现不一,仅供参考说明:

<add key="Aop" value="Web.Aop,Web.Aop.AopAction"/>

2:为每个用户创建SQLite数据库

主要为三步:

1:创建SQLite数据库;

2:创建文章表结构;

3:将主表的原有的用户文章复制一份到新数据库去。

以下为代码节选:

再接下来,就是处理各种“增删改查”的数据库同步问题:

3:增加数据的处理流程:

先看一个插入代码AOP的伪方法:

网友评论
<