修复数据和数据结构

From semantic-mediawiki.org
N/A
Describes ways on how to repair and rebuild data.
Table of Contents

Semantic MediaWiki (SMW)所使用的所有数据都存储在维基页面里。如果这些数据过时或含有任何错误的话,总是可以完全重建这些来自相应维基站点的数据。不会丢失任何的数据。在某些软件更新时以及在首次安装(因为安装时也会收集一些已有的元数据)之后,也都需要刷新数据。

本页面旨在说明多种用于从根本上修复/初始化任何SMW安装的方法。单个页面上数据的刷新只需对该页面进行编辑和保存即可实现。如果有许多的页面,利用SMW管理员页面Special:SMWAdmin的一种功能来自动完成这项工作则比较方便。在命令行当中使用维护脚本SMW_refreshData.php,亦可达此目的。

要确保所有维基页面在修复之后都能够显示新的数据,可以运行脚本touch LocalSettings.php(或者,无法使用命令行时,可采用某种普通的方式<in some trivial way>来对其加以编辑)。该脚本会废弃任何的MediaWiki页面高速缓存,否则后者可使您看到旧版本的维基页面。


使用SMW管理员页面Special:SMWAdmin[edit]

管理员特殊页面Special:SMWAdmin提供有一个用于修复全部数据的功能。该页面仅对具有管理员身份的维基用户开放。而且,只有当配置选项$smwgAdminRefreshStore设置为true(默认值)的时候,才能在线启动或停止更新过程。

一旦启动,更新就要花费一定的时间。在Special:SMWAdmin页面上可以查看其进度。即使是在更新启动之后关闭了选项$smwgAdminRefreshStore,正在进行之中的更新过程也会继续进行,且可以在线加以跟踪。只有当启用$smwgAdminRefreshStore的时候,才有可能停止此过程。

根据维基站点的不同,更新所需的时间也会各不相同。在阅览每个页面的过程中,也会进行更新。如果查阅您的维基站点的人有很多,则更新会进展得更快些。如果页面数量很多,则更新会花费更长的时间。正常情况下,在更新进度达到50%之前,更新过程会比较快,因为在这个部分当中,刷新的只是属性和类型页面。所有维基页面的实际更新是从进度50%时开始的。要加快这一过程,您可以使用MediaWiki维护脚本runJobs.php。请考虑规定一个参数--maxjobs 1000或者类似的限制,以便该脚本的每次运行限定在有限的时间内。否则,该脚本往往倾向于占用越来越多的内存空间。

SMW管理员页面Special:SMWAdmin
SMW管理员页面Special:SMWAdmin提供有关启动更新过程的信息
数据修复过程中的SMW管理员页面Special:SMWAdmin

使用SMW维护脚本[edit]

尽管基本上可以在不利用维护脚本的情况下使用上述方法,但同时还有一个脚本SMW_refreshData.php,可以在不事先进行任何访问存取的情况下,对维基站点的所选部分直接进行刷新。SMW_refreshData.php的基本操作就是遍历当前维基站点的所有页面,并重新存储每个页面的语义数据。正常情况下,进入您的SMW安装目录[SMW_path]/maintenance,然后执行下列命令:

php SMW_refreshData.php -v

当然,需要在命令行安装php。如果这个方法对您的站点不起作用(比如,因为异常的目录结构),请阅读文件[SMW_path]/maintenance/README

上述脚本按照所有页面在您的维基数据库之中的存储顺序,对它们加以遍历,并刷新其相应的数据。参数-v用于确保打印输出该脚本的进度。像往常一样,按组合键"CRTL-C",即可中断该脚本的执行。该脚本所显示的索引号,不仅指的是MediaWiki之中所使用的页面索引,同时也指的是SMW在其语义数据之中所使用的索引。鉴于这个原因,该脚本可以处理数值大于该维基站点之中最大页面索引的索引号。

如果您拥有大量的页面,则该脚本在执行过程中可能会花费大量的内存空间,因此最好在比如说2000页之后停下来。这是因为一个PHP内存泄漏造成的。 作为一个变通措施,该脚本的运行一次只能针对部分的页面:采用参数-s-e分别定出所要刷新的第一页和最后一页。比如:

php SMW_refreshData.php -v -s 1000 -e 2999

可能会需要多次运行该脚本,比如,只有当存储了属性的数据类型之后,才能对属性数据加以存储。可以采用参数-tp来运行该脚本,从而首先仅仅刷新类型和属性页面,这样,在进行第二次刷新的时候,这些数据已经现成可用。总的来说,在正常情况下,刷新应当不超过两次。

要保证所有的维基页面都显示的是刷新之后的新数据,运行touch LocalSettings.php即可。这将废弃任何的MediaWiki页面高速缓存,否则这些缓存可能使您看到的是旧版本的维基页面。

全部重建[edit]

在大多数情况下,上述这些方法应当能够修复SMW之中的数据记录。然而,可以想象的是,出于某种原因,SMW存储之中仍会存在某些错误的内容。在这种情况下,就有必要在刷新所有数据之前彻底删除和重新安装SMW的数据库结构。

彻底删除全部的SMW数据,请配以参数--delete来使用安装脚本SMW_setup.php

php SMW_setup.php --delete

此后,就像重新安装SMW那样,首先再次运行php SMW_setup.php,继而采用上述那些方法,启动对所有数据的修复。

亦可配以参数-f来运行刷新脚本SMW_refreshData.php,从而一步删除和重建所有的数据。在这种情况下,建议首先重建所有属性和类型的记录,之后在处理其余的数据。因此,可以按下列方式来运行脚本:

php SMW_refreshData.php -ftpv
php SMW_refreshData.php -v

当然,请注意:只有第一次运行使用参数-f。如上一节所述,在大型维基站点上,可再次使用参数-s-e

自动修复功能[edit]

维基页面上的某些变更也需要对其他页面上的数据加以更新。 例如,如果变更的是某个其中含有语义标注的模板,则可能也会需要更新所有采用该模板的页面的数据。 类似地,如果某个属性的数据类型发生了变更,则应当刷新所有采用该属性的页面。 SMW通常会自动处理此类更新。就像在MediaWiki之中那样,要完成所需的全部更新,可能会花费一些时间。 在这种情况下,并没有任何方便的手段来查看进度,但作业数量(参见Special:Statistics)可以反映维基站点当前的背景活动。

告诫[edit]

当通过把配置参数$smwgNamespacesWithSemanticLinks设为true,来添加新的命名空间或者激活已有命名空间的时候,如本页所述,对于数据的修复或初始化,并不会重建默认属性Modification date(修订日期)。在这种新的命名空间当中,当一个页面添加到维基站点当中之后,每次当修订该页面的时候,才会创建该属性。