新浪的内容管理系统CMS模型

在SinaCMS中,万事万物皆模板
服务器君一共花费了223.531 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

在代码层次上看,SinaCMS是使用C++编码的,模板取数据的时候则使用了perl脚本。SinaCMS里面频道、项目和模板是结合在一起的,他们三者的关系是:

  1. 一个频道就是一个项目,在数据库里面体现就是一个数据库,比如说新闻中心,对应一个名为news的数据库;
  2. 一个频道会有若干个模板,例如首页,新闻页,这些在数据库中体现为相关的表;
  3. 模板需要定义模板域,模板域有表单类型模板域(Form)和应用类型模板域(Application)两种类型,前者面向编辑的提供数据界面接口功 能,后者面向技术支持人员提供高级的二次开发功能。模板域在数据库中就是模板表中相对应的数据扩展字段,例如Form::TextField对应的就是 text字段,数据由编辑录入,Application::SQLResult,也是text字段,存储的则是执行Perl脚本执行后的结果。模板的内容存储在另外的字段中。

不难看出,SinaCMS具有极其强大的灵活性。因为它的数据库结构是项目建立以后构建模板的时候才确定的。各个频道,例如资讯频道、财经频道和汽车频道,可以拥有完全不同的数据库结构,不同频道的特殊需求也可以完全定制。另外可以看出SinaCMS里面的模板是最主要的模型,承担 了确定数据表结构、文章发布和管理以及配置频道参数等等功能。

我们来看CMS系统中常见的新闻页,频道首页和列表页在SinaCMS中是怎么实现的。

编辑上文章时,先找到该频道的新闻页,然后在下面录入文章,录入完毕后点击发布,系统会根据模板的内容去获取相关的字段内容,根据模板的属性最后发 布成相应的静态文件,其间如果和其他模板有相关关系(在新闻页模板域中定义Application::PostInPage),则会去触发相应的模板(例 如首页和列表页)更新。

在首页模板的区块中,可以分为动态和静态两种。对于需要经常更新的静态区块,可以独立出来做成一个模板,静态区块就相当于该模板下的一篇(有且仅有 一篇)文章,当然也可以在首页中新建一个Form::TextField的模板域。动态区块例如动态新闻列表,则可以在首页中新建一个 Application::SQLResult的模板域,通过执行perl脚本获取内容填充,然后在首页模板内容引用该模板域,当然同样也可以新建一个只 包含一个Application::SQLResult域的模板。

对于列表页,首先列表页的分页值可以存储在列表页的模板域中,也可以保存在某个模板中。分页在处理时,会通过perl脚本来执行分页算法。最终所有列表页都是列表页模板下的一个文档集。

在一个项目中,为了提高发布效率,还会存在若干的临时存储表和归档表(其实就是一些模板啦)。例如在首页的动态新闻列表,就有可能建一个临时存储数 据的模板,这时如果频繁更新首页或者含有动态新闻列表的模板时,无疑将减轻数据库的压力。新闻单页的模板在处理时可以就保存最近一个月内的文章,尤其在文 章数据增长较快的频道,这时就很有必要。那么以前的文章就需要转储到一个归档表中,作为查询和偶尔更新某篇文章使用。

SinaCMS中的频道路径path(例如资讯>大陆>正文)是通过模板处理的,在模板的模板域中会用perl来处理相关的逻辑。子频道和专题也是通过模板来实现的,它会通过新增一个模板来建立子频道和专题之间的关系。

至此,我们可以了解到SinaCMS中使用了非常多的冗余字段来存储本来需要多表联合查询的数据,这无疑提高了文章的发布效率。

在其他的CMS中,模板只是独立概念中的一个,而在SinaCMS中,万事万物皆模板。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1059,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1059

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《C陷阱与缺陷》 Andrew Koenig (作者), 高巍 (译者)

《C和C++经典著作•C陷阱与缺陷》适合有一定经验的C程序员阅读学习,即便你是C编程高手,《C和C++经典著作•C陷阱与缺陷》也应该成为你的案头必备书籍。作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作《C和C++经典著作•C陷阱与缺陷》的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。《C和C++经典著作•C陷阱与缺陷》分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。

更多计算机宝库...