2009-07-05 217 views
33

我目前正在设计自己的数据库驱动的网站。主要原因是为了学习的目的,但我不会说谎,还有少量的虚荣心包括在内!如何将文章或其他大型文本存储在数据库中

虽然我相信我的数据库设计目前还算不错,但我仍然不完全确定存储文章或其他大型文本的最佳方式。我知道大多数DBMS具有TEXT数据类型或等效功能,并且可以容纳大量文本。但是,将整篇文章存储为一个长字符串会导致阅读不愉快,因此需要格式化。

我是否会将文章文本与所有HTML或BBcode标签一起存储 - 或者是更好地简单地在HTML或XML文档中创建页面并将此文件的路径存储在数据库中?

我非常喜欢将文章作为XML文档存储的想法,因为我可以使用自定义标签轻松标记文章并使用PHP的XML和XSLT函数将XML转换为HTML [或者其他任何格式]。它还允许作者指定何时创建行/分页符。这种方法当然需要额外的编码[我并不害怕],但它确实使得文章可被搜索出现问题。

我知道MySQL,例如,SQL语法用于搜索文本字段中保存的字符串中的特定术语/短语。如果我要将文本存储在单独的文件中,我如何才能使这些文章可供搜索?

有相当多我在这里写上这么简单的问题很多,所以我将它分解:

1:有没有直接在数据库中存储大量的格式化文本的一个“最佳”的方式或
2:最好是以HTML/XML /任何文档的形式保存该文本的路径。

如果是2,是否有一种使该文本可以搜索的优雅方式?

感谢您的时间:)

回答

20

像Alex建议的那样在一个大文本字段中存储everthing。对于搜索,请勿敲击数据库,请使用Lucenehtdig来创建输出索引。这种方式搜索速度非常快。副作用是你让你的搜索多一点搜索引擎友好;你把你的关键字字段(作为反斜杠建议),并将其粘贴在meta-keywords属性中。

编辑

除非你只搜索关键字,具有DB做搜索会异常缓慢(曾经搜索的论坛,它永远?)。有没有办法让数据库索引

select.. where FULLTEXTFIELD like '%cookies%'. 

这是令人沮丧寻找的文章,搜索将不会返回寻找,因为他们不是在关键字字段的结果! Htdig允许您高效地搜索文章的全文。您的搜索将立即回来,并且文章中的每个术语都可以完全搜索到。将关键字放在元标记中会使结果页面上的搜索条件更高。

另一个好处是模糊匹配。如果您搜索'激活'htdigg将匹配具有活动,激活,活动等(可配置)的页面。或者,如果用户拼错单词,它仍然会匹配。你希望你的用户有一个像谷歌一样的经验,而不是一个恼人的。 :)

您确实需要一个脚本来创建从您的数据库中的所有页面的链接列表。让htdig自动抓取这个,你再也不用考虑了。

此外,htdig还会抓取您的非数据库页面,所以您的整个站点都可以通过相同的简单界面进行搜索。

至于关键字字段,你应该应该有一个单独的表称为关键字与文章的id和关键字字段(每行1个关键字)。但为了简单起见,在数据库中使用单个字段并不是一个可怕的想法,如果将它放在一个表单中,这使得更新关键字非常容易。

如果您不想大惊小怪,可以尝试使用 Google custom search。这是少得多的工作,但你不能保证你的所有网页都会得到索引。

祝你好运!

+0

哇,谢谢拜伦。你的编辑是一个很大的帮助,而且ht:// Dig看起来不像我想的那么严格。 对于一个拥有数据库的非常小的网站来说,搜索并不是一个很大的交易,但我希望如果我的项目适用于我的网站,我可以将其重用给其他人,如果它是可伸缩的,它将会很好。 但这是对未来,目前我需要实际编码的东西:) – Etzeitet 2009-07-09 21:15:28

2

取决于你如何安排和安装的一切,它可以是很难远程客户端访问外部的文件,可以访问数据库就好了 - 那么为什么不保存所有的XML到一个TEXT字段呢?如果数据库引擎无法很好地处理该负载,则可以重构事件以进行优化,但这是最简单的入门方法。

9

创建TEXT,BIGTEXT,LONGTEXT和其他数据类型字段是为了存储大量文本(取决于RDBMS的64 KB到4 GB)。他们只是创建一个辅助指针来定位数据库中的文本,而不是直接存储在表中。如果您在varchar字段中存储路径以查找文档,但将其保存在数据库中使其更易于维护,则几乎可以使用相同的过程,因为如果删除该行,则文档会随之消失,而无需在其他过程中将其删除(就像你存储为一个文件一样)。从逻辑上讲,这会使数据库变大,有时不易于备份和传输,但逐个传输文档将会很乏味且速度较慢。

正如您所看到的,它取决于数据库中的数据和行数。

对于搜索过程,我建议创建一个新的“关键字”字段,以加快您的搜索。您也可以搜索文档的前n个字符,将它们转换为CHAR或VARCHAR,如果标题和副标题没有特定字段,则将标题和副标题定位到这些数量。

1

快速查看原生XML数据库。有几个,一些非常好的是免费的。

搜索eXist,Document xDB,Oracle Berkeley。

如果你坚持,查询和更新半结构化文本,并且如果结构有任何深度的话,如果你坚持使用指针的RDB或者它的东西 - 一个blob技术 - 虽然有许多外部原因,这些架构可能是必要的和成功的。

在您承诺进行设计之前,先仔细阅读XPath和XQuery。这是一个很好的开始:https://community.emc.com/community/edn/xmltech

相关问题