关于内容管理系统中文章的存储解决方案的讨论

5 views
Skip to first unread message

Hobart

unread,
Jul 6, 2009, 4:19:24 AM7/6/09
to CPHPUG-中国PHP用户组
在内容管理系统中。对文章的发布,存储,更改是其核心内容,那么对文章的存储采用什么方式可以更好的体现性能和方便用户使用呢?

目前,有两种待选存储介质:
1、文件
2、数据库

请大家来谈谈自己的想法,采用何种方式存储?希望方案中要包括对性能的分析,执行效率的分析,以及一些注意事项,优缺点等等。我对这方面还不是很熟,待
查询资料后再发布我的方案,请大家积极参与讨论

Peak Jing

unread,
Jul 6, 2009, 4:38:38 AM7/6/09
to CPHPUG-中国PHP用户组
个人经验:


一般情况下,CMS中的文本(也就是非上传产生的)数据均采用数据库存储。好处主要是操作方便、易管理、对文件系统的依赖较小等。

用文件也是可以的,但有些缺点,不方便查询和管理、对文件系统依赖较大(特别是非常多的小文件时,一定要慎重选择文件)。


关于性能方便,对于CMS建议使用静态发布+CDN分发的形式设计系统,但这也有缺点,当涉及较多数据(页面)的模块变化时,需要重新发布很多内容(某
些时候可以考虑SSI来解决此问题,但 变化太大时无效),CDN最大的问题就是主动过期和错误被CACHE的问题,当然这些下功夫想解决都可以想出办
法来。

Hobart

unread,
Jul 6, 2009, 6:31:06 AM7/6/09
to CPHPUG-中国PHP用户组
我也是比较倾向于数据库的,你说到SSI来解决重新发布,我没用过,刚查了下,实际就是对固定文件的包含,我在这里猜想一下,这里为什么使用SSI而不
是直接用PHP的包含呢?静态化得结果应该就是试页面可以直接在客户端缓存,已减轻客户端访问服务器的压力吧?SSI语句不也一样需要解析吗?这里能带
来什么样的效果呢?

不太明白,我会继续查资料求证,也请你说说你的考虑吧?

> > 查询资料后再发布我的方案,请大家积极参与讨论- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Peak Jing

unread,
Jul 6, 2009, 9:25:02 AM7/6/09
to CPHPUG-中国PHP用户组
SSI的好处是解析更快,语法更简单(基本模坂中基本上只有HTML),不需要学习PHP程序就能完成,而PHP是复杂的,性能不如SSI。多数情况
下,在生成的静态文件中已经没有太多的逻辑,所以应更简单。如果使用纯PHP代码还好,如果用上Smarty之类的,那性能就更不好了。


在一个WEB SERVER上,只有静态内容最快,加了动态内容就会大幅降低性能,这个可以简单的通过AB来测试。

另外,无论是.php还是.html都是可以缓存在客户端的,这个可以通过向客户端发送 的http头中的cache属性来控制。

Hobart

unread,
Jul 7, 2009, 2:22:30 AM7/7/09
to CPHPUG-中国PHP用户组
也就是说这样做能够更好的分离表现和逻辑,是前端模板设计人员能够更快的掌握用法,同时保持静态内容的高效。
前面说到CDN分发,这里是采用多个镜像来分别处理来自不同区域的访问吧,如果我想在这里面加入memcached服务器来缓存数据,应该在这个层次中
放置在什么地方呢?

现在分析的访问流程就是用户访问一个导向服务器,然后在这里根据用户的IP来导入相关镜像访问。那么这个导向服务器的压力就只有在用户刚访问的时候有一
次连接,访问压力也就不大了。那这个过程中还有必要使用专门的缓存服务器吗?按我的想法就是,这里各镜像和主服务器的内容是保持完全一致的,是一个双向
同步的过程,而CMS也主要是以静态内容为主。那么缓存服务器在这里是否还有必要?

> > > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Peak Jing

unread,
Jul 7, 2009, 5:29:57 AM7/7/09
to cph...@googlegroups.com
Memcached 一般保存复杂业务逻辑计算后的结果或是多台WEB间需要共享的数据,这些数据有几个特点:1、较小;2、不频繁更新;3、重用性高;4、多个服务器读写等,例如分类信息、用户名和ID的对应关系、公用系统状态数据、SESSION等。做为CMS,主要内容不建议放到Memcached中,可以保存一些文章的分类、公共模块定制属性、SESSION等。

关于您说的导向服务器不是太明白,是说做CDN时,用做查找浏览者可以使用的最快服务器吗?




2009/7/7 Hobart <hobar...@gmail.com>



--
Welcome to my website : http://peak.name/

Hobart Yao

unread,
Jul 7, 2009, 10:19:03 PM7/7/09
to cph...@googlegroups.com
呵呵,我说的导向服务器的确是用来判断用户地域并导向不同地区镜像的服务器。。。。。。可能真正的术语不是这样叫的。。。。或许应该叫访问控制接口之类的吧。。。。。
 
恩,也就是说MEMCACHED服务器的位置应该是在网络结构的导向点和最终点之间,在某几个服务器之前使用一个。由主服务器对各S端的同步进行控制。而主服务器本身并不作为访问点。在资金允许的情况下,这样的网络结构设计是否能达到更高的安全性?也就是说主服务器对浏览者来说是不存在的,其使用权仅为管理者。
这里好像不能绘图,我做个大概的示意:
 
 
 
                                                                                               |-----------镜像
         主服务器------------管理者                                                   | ----------镜像
               |                                                                               |-----------镜像
               --------------------------------------------------同步接口---------------- |-----------镜像
                                                                                          |    |-----------镜像
                                                                                          |    |-----------镜像
访问者------------------------访问控制接口-------------------------------------|
这样主服务器只通过同步接口和各镜像进行同步操作。而和访问者隔离。
 
主服务器由于和访问者隔离,那么对镜像发送的数据理论上是安全的,而各镜像的数据在回送的时候,由同步接口对数据再进行一次过滤处理。
 
但是这样的话有个问题,也就是要保证各镜像的数据是一致的,那么同步操作就会比较频繁,这样在性能上是不是会有很大的欠缺?
 
2009/7/7 Peak Jing <peak...@gmail.com>
Reply all
Reply to author
Forward
0 new messages