我想了解维基是如何工作的,至少从高层次来看。当用户保存更改时,它是否始终在该wiki文章的数据库中插入新行(10个修订版,数据库中的10行)。
答案 0 :(得分:5)
我同意所有答案。 Wikis通常会将每个编辑作为数据库中的新记录处理。
您可能有兴趣查看完整的 Layout of the MediaWiki database diagram ,Wikipedia背后的wiki引擎。
Layout of the MediaWiki database diagram http://img22.imageshack.us/img22/3953/wikix.jpg
请注意,每个修订的全文都存储在MEDIUMBLOB
表的text
字段中。
答案 1 :(得分:4)
我刚刚在C#中写了一个wiki。我要添加到其他人的评论中的一件事是你要确保你可以比较两个版本。为了在C#中执行此操作,我强烈建议使用来自Google的diff_match_patch库的C#实现。它非常快,如果您需要更多的打印或处理结构化文本(如HTML),它很容易扩展。
答案 2 :(得分:3)
wiki中的每个条目都是数据库内的新条目。 这样可以跟踪修订。这完全是关于社区和跟踪。 在幕后,数据库存储日期时间,所做的更改等。
答案 3 :(得分:2)
是的,确实如此。否则,将无法看到完整的页面历史记录,这是Wiki实现所期望的。
答案 4 :(得分:1)
是
...
似乎有点短。我们只是说您必须存储原始文章,然后再详细说明每次更改。所以你可能有一个Article表和一个Revision表。这样你就可以回滚到任何先前的状态。
当然,表格的设计,从原文中删除修改后的文本并单独存储的逻辑非常复杂。
答案 5 :(得分:1)
以下是TWiki的开发博客,可能会为您提供一些有用的信息。 http://twiki.org/cgi-bin/view/Blog/WebHome?category=Development。
Sql是否是项目的要求?目前NoSql周围有很多动作,wiki似乎很适合文档存储数据库。有关此问题的一些信息,请访问http://nosql-database.org/。
http://wikiplex.codeplex.com/在Codeplex上有一个实现。这是来自stackoverflow asp.net mvc wiki上的另一篇文章。
答案 6 :(得分:0)
您可能想要检查是否可以将版本控制引擎用于文本部分(用户等可能仍需要数据库),因为大多数版本控制系统都具有所有必需的功能(历史记录,差异,更改的日志条目) ,...)这将为你节省大量的工作。