我没有数据库开发方面的经验,所以在选择可以在Firemonkey
中使用的数据库时,我需要您的建议。
我需要存储html文件(现在没有媒体,但它们可以一起使用),它们的总大小约为20 GB(未压缩文本)。主要功能必须是在数据库中最快速地搜索文本,并且必须能够实现人类搜索(如谷歌)。另外,可以进行压缩(20 GB是要存储的。如果压缩使搜索速度变慢,则不需要)。
哪种数据库适合我的关注? 非常感谢您的建议!
要求:
我知道一个在线网络法律数据库,可以在几毫秒内通过100 GB的信息搜索单词。我需要相同的性能,并且需要类似Google的搜索。
答案 0 :(得分:7)
Delphi数据库访问层与FireMonkey分开,它与VCL使用的相同(尽管FM AFAIK仅依靠LiveBindings来访问数据,但在您的情况下这不是问题)。
今天20 GB真的没什么数据。如果配置正确,几乎任何数据库都会毫不费力地处理它们。选择什么引擎取决于:
还没有“一个数据库适合所有人”。
答案 1 :(得分:4)
我不是DBA,所以我不能直接说,老实说,我不确定任何一个人都可以直接回答这个问题,因为这只是场景中的一个。
http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
这是比较功能和平台兼容性的良好起点。我认为这里要考虑的主要问题是硬件将运行它,以及如何最好地利用它来完成手头的任务。
如果您有一个服务器场,确保您的数据库支持分发和某种负载平衡(大多数在某种程度上取决于我的理解)。
为了加快搜索速度,除非你编写一个自定义算法来搜索压缩版本,我认为你会想要保持数据不被压缩。实际上搜索压缩数据可能会更快。如果您能够使用压缩文件的索引与纯文本搜索参数进行比较,那么只需查找索引中匹配的那些键。如果在索引中找到任何内容,请在压缩数据中检查它们。没有大量的自定义代码,我没有听说过任何支持这种搜索压缩文本的DB(尽管我在这一点上很容易出错)。
如果在进行搜索之前需要对整个数据集进行解压缩,那么它很可能会慢得多(内存相对于CPU时间相对便宜)。看起来Firemonkey的数据库选择有限,因此有助于缩小您的选择范围。
根据您编辑的问题,我建议的是编写(或查找)解析器或正则表达式,以从HTML中提取您想要搜索的所有重要元素。然后将它们与在HTML中找到它们的位置的引用一起存储在数据库中。就谷歌而言,如果你的意思是如何纠正拼写错误并使用同义词,你可能需要某种自定义代码来进行拼写的词典查找和同义词的词库查找。我相信在任何现代数据库中进行全文搜索都会处理在where子句中使用LIKE或类似语句进行查询的需要。
看起来ldsandon的答案无论如何都涵盖了大部分内容。 TLDR;如果不是因为阅读。
答案 2 :(得分:3)
我会推荐PostgreSQL来完成这项任务。它具有良好的性能,并内置全文搜索功能,可用于类似Google的搜索。它是免费和开源的。
不幸的是,Delphi并没有提供开箱即用的Postgres数据访问组件。您可以通过ODBC进行连接,也可以购买可用的组件,例如Devart,DA-Soft或microOLAP。
答案 3 :(得分:3)
您是否考虑过NoSQL数据库?维基百科的文章解释了它们与SQL数据库的差异,并且还提到它们适合作为文档存储。
http://en.wikipedia.org/wiki/NoSQL
本文列出了文档商店类别中的大约12个实现,其中许多是开源的。 (Jackrabbit,CouchDB,MongoDB)。
Stackoverflow上的这个问题包含一些指向Delphi客户端的指示:
我还会考虑在应用服务器上进行缓存,以加快搜索速度。当然还有像Apache Lucene这样的文本索引解决方案。
答案 4 :(得分:1)
我会使用Microsoft SQL Server Express Edition。我认为2008 R2是最新的稳定版本,但也有Denali(2011)。它符合你所有的标准。
您可以使用ADO进行操作。
答案 5 :(得分:1)
试用Advantage数据库服务器。
易于管理和配置。 dbase-like和SQL数据管理语言。 快速索引的全文搜索功能。 此外,开发人员自己提供无与伦比的支持。
本地服务器(独立版本,而不是基于网络的服务器)是免费的。
devzone.advantagedatabase.com
答案 6 :(得分:1)
Firebird版本根据其文档提供全文搜索 - http://www.red-soft.biz/en/document_21 - 它使用Apache Lucene,一种流行的搜索引擎