读取Discuz!如果新的架构更能承载能力
Discuz!X2.5 RC版本上周公布的。站长杂志第一次连接Discuz!开发商解释,在系统架构方面的改进,Discuz X2.5特点性能负载、功能组件和应用中心。萧边专门邀请Discuz!开发组成员bilicen。他向我们介绍了开发人员的低层次架构,为代码重构注入了大量的时间和精力。站长:bilicen你好!Discuz!什么样的改善已经在本系统的架构呢
Bilicen:我们主要做了六方面的改进,包括:
1、程序改进的基础架构;2、用户输入数据的处理;3、完善数据库层;4、优化内存级缓存层;5、多服务器池分布式部署;6、优化的主要性能瓶颈,通过这六个方面的改进,Discuz!本系统的架构是完全重建,承载能力更强,并支持各种第三方插件和模板的扩展,能满足未来发展需要的论坛。
大师:为什么要对系统架构做出如此大的改变
Bilicen:对于站长的需求是无限的,而论坛功能是有限的,和论坛系统结构的承载能力是有限的。为了满足更多站长的需求,系统架构应该先改变。以前的论坛版本更像一个普通的货船,进行货运有限公司。铁饼!如果像诺亚的方舟,它可以进行各种各样的东西,它是在论坛的水平表明,新版本支持的各种功能,插件和扩展,站长的需求。
站长:在系统架构改进的六个方面,我们可以选择一个要点来介绍
Bilicen:我在这里关注下铁饼!关于改进的底层架构,即加强对Discuz!X2.5方舟骨架。首先,我们有5.1多个版本的PHP,放弃支持PHP4的;其次,我们使用面向对象编程(OOP),代码的重用和维护;再次,在程序的执行过程实现所需的负荷,减少在一个过程中的非必要的文件的分析,按需荷载主要为类文件;最后,为了实现程序的按需加载、目录名、文件名和的名义要求如下:
在 / /类源文件的目录,类名与文件名,文件名显示的类型(_)之前首先强调的是目录名分开,类名不强调直接放在 / / /源类目录。在个别特殊类产品不能自动加载,由于历史的原因,包括或需手工处理。
站长:在基础结构的改进上,肯定会涉及到一些核心文件的转换。转变的主要思想是什么
Bilicen:转型的主要思想是采用一种新的底层架构,接口和避免底层架构臃肿。我们改革的2个核心文件,如class_core.php输入文件和function_core.php减肥手术。朋友在这代码,感兴趣的可以参考我提供的附件(1)。
站长:你主要做的是数据层隔离吗
Bilicen:数据层的分离,首先,原来的DB类文件应该改进,和系统的逻辑层没有直接操作数据库的SQL语句。例如,当你需要承载大量的集装箱货物在Discuz!本柜,你可以把他们都在甲板上,但你不能把它们放在方舟的船舱和驾驶室,以保证行车安全和稳定航行的方舟。
作为代码编写的一个例子,前面的代码是编写的。
rushresult美元=分贝::fetch_first(SELECT * FROM。分贝::表('forum_threadrush)。在TID =美元_g { TID });
现在,在新的体系结构下,代码实现如下:
rushresult美元= C::T('forum_threadrush)->取($ _g { 'tid});
你可以看到,数据读写已经完全封装,没有SQL语句,直接运行程序的业务逻辑层的数据库。有兴趣的读者可以参考的forum_viewthread.php文件的代码比较。
站长:站长的数据读写包有什么优势
Bilicen:优势明显,数据层隔离(附件2)Discuz!本系统更加安全、做大做强,承载能力高,而且对内存缓存层增加数据库的分布式部署的基础,第三方插件没有后续的升级和升级系统架构。这是文章的开头。从货船升级到诺亚方舟,不仅更加稳定和安全,而且还支持各种功能插件,可以满足更多站长的不同需求。
主人:谢谢你,Bilicen。在下一阶段,请给我们解释一下Discuz!对子服务器部署的创新。
1:在class_core.php入门文档,function_core.php减肥过程:
class_core.php是进入启动文件,主要实现了以下功能:
1、注册加载方法和异常处理的方法;
2,c:t方法的实现;
3,内存初始化;
4、创建一个discuz_application实例(discuz_application是原Discuz!X2 discuz_core);
5。缩写类的映射:
类C扩展核心{ }
类DB扩展discuz_database { }
function_core.php是核心函数库文件系统,随着系统功能的丰富,越来越多的图书馆,慢慢变成了一个快速启动系统的负担,因此我们将在function_core根据功能分成不同的类文件的功能,实现对程序的按需加载;原函数名称不变,做一个静态方法相应的映射,和插件兼容产品的使用。
具体的做法是增加两个目录的源/类目录,帮手和lib的源/班/辅助目录作为一个分类的集合类,可以直接使用,无需实例化文件在源/班/ lib目录设置类文件的工具函数文件,当用于实例化。
附件2:数据层隔离:
1、addslashes处理
插入()、更新(),删除()方法处理数组的形式传递给它的参数是:intval或addslashes,的字符串形式的参数将不被处理,请注意。
2,添加新方法
fetch_all($ SQL),为了(),(),()领域的限制和其他方法。fetch_all方法返回查询多个记录的数据阵列的方式,可以设置数据使用一个字段值的关键值。
三.增加SQL语句格式的支持
例如:查询10用户uid大于100的用户的数据,和UID返回结果数组的键
$ ARR为分贝::fetch_all(‘SELECT * FROM %T,UID > %d限制drsquo;极限;(f);(2);(2);(2);;;;;
支持的格式有:
4,返回值的处理
在非缓冲的情况下:
插入SQL语句返回insert_id()
更新和删除SQL语句返回affected_rows()