在MediaWiki的非结构化数据中部分实现结构化数据库功能
“在MediaWiki的非结构化数据中部分实现结构化数据库功能”和“在MediaWiki平台下模拟数据库功能”在这里有相同的下面内容。
--James Qi 2008年3月19日 (三) 14:21 (CST)这段时间一直忙于人工搜索网站的质量检验调整等事宜,在这个过程中进一步积累了一些在MediaWiki平台下模拟实现数据库功能的经验,在下面说说。
Wiki网站的数据库功能需求
据我所知,国内现在有不少Wiki网站还是使用的MediaWiki平台,虽然有hoodong也推出中文的Wiki软件系统,但似乎功能上还需要完善。MediaWiki的建站、编辑中一直存在用户界面不友好的问题,但其功能却是非常强大的,也远比百度百科目前使用百度自己开发的系统要好得多。
因为从2006年2月开始设立第一个Wiki网站到现在的两年多时间里,我一直都在使用MediaWiki软件,对这方面可以说了解也算很多了,自己估计在国内比我更熟悉MediaWiki软件使用的人都不会多。
MediaWiki主要适合做Wiki网站用,并不适合做结构化数据库的应用,但我们这次在人工搜索的应用中就感觉很需要一些辅助的数据库,例如页面的质量检验数据记录(包括质量评分、页面创建者、创建时间、合格者、合格时间、审核者、审核时间、维护周期等),又例如用户的属性记录(包括注册日期、第一个实验页面、是否兼职者、是否审核员等),有了这些数据才能更好地组织管理,可能其它的Wiki网站在深入运作的工程中也会遇到类似的需求。
国外围绕MediaWiki开发了不少扩展程序,但好像也没有一个扩展能正好符合我们的需要,而自己找人来开发做扩展一直是我们避免的事情,于是想到用通用的扩展程序及MediaWiki自身的功能来实现模拟数据库功能。
其实需要实现的模拟数据库功能无非就是数据库的结构设置、数据库的数据添加删除修改、数据库的数据查询、数据库的报表输出等基本操作,通过这段时间的实践,我觉得是可以实现的,下面分别说说。
数据库的结构设置
使用MediaWiki自带的模板功能就可实现,在模板中的参数就是数据库的字段。例如:
{{QC |质量= |创建者= |创建年= |创建月= |创建日= |合格者= |合格年= |合格月= |合格日= |审核者={{<includeonly></includeonly>subst:CURRENTUSER}} |审核年={{<includeonly></includeonly>subst:CURRENTYEAR}} |审核月={{<includeonly></includeonly>subst:#expr:{{<includeonly></includeonly>subst:CURRENTMONTH}}}} |审核日={{<includeonly></includeonly>subst:CURRENTDAY}} |维护者= |维护年= |维护月= |维护日= |维护周期年= |维护周期月= |维护周期日= }}
上面的例子中,QC就是一个模板,也可以看作一个数据库表的定义,而“质量”、“创建者”、“创建年”等模板参数,就可以看作数据库表的字段。
数据库的数据添加删除修改
这个比较简单,创建、修改、删除调用定义好模板的页面及其参数,也就是对这个模拟的数据库进行数据添加、删除、修改等操作,例如在“QC:姚明、QC:刘翔”这些页面中就可以修改参数。一个页面相当于数据库的一条记录。
数据库的数据查询
这是比较麻烦的第一地方,仅仅通过MediaWiki自带的Category分类功能实现的功能是很有限的,远远不能满足实际需要,我们主要是使用DynamicPageList2这个叫做动态页面列表的扩展程序来实现的,以前也一直在用这个扩展,主要只是用到其最基本的某个分类新页面列表等功能,而这次为了实现一些联合查询,除了一般的按照分类来查询以外,还可以按照名字空间、链接到的页面、是否使用某模板、页面标题等多种条件来进行联合查询,并可以灵活使用“与、或、非”等逻辑组合。
数据库的报表输出
以前使用动态页面列表扩展时一般只用到了列表排序、数量控制等简单输出控制,这次在实现质量检验等功能的时候算是见识了这个扩展的强大:可以修改列表抬头、增加页面大小、编辑者、编辑时间、浏览次数,还可以包含符合条件的页面中的部分段落内容到列表中,使用自定义的模式可以仔细控制列表的输出格式。我以前就想到一些查询需要的功能,这次多能够通过实践来实现,真是太好了!具体的用法可以参考DynamicPageList2中的英文说明。
另外,这段时间的摸索中还对subst替换用法、新增currentuser变量等办法进一步了解掌握,越来越觉得选择MediaWiki真是一个正确的选择!唯一的担心就是在网站中运用到的动态功能太多了,对服务器的负载肯定是有影响的,但现在也还不能量化对负载的影响多少,只能先以实现功能为主,随着网站的流量发展,再来对付负载的问题。
忙了这一阵,好些天没有写日志了,写了上面这篇枯燥无味的东西,估计很少有人用得着,就留着自己看吧。
标签:MediaWiki、人工搜索、数据库。 |
相关内容:
|
别名:MediaWiki平台下实现数据库操作、在MediaWiki的非结构化数据中部分实现结构化数据库功能。