10

我们正在创建一个开源Twitter 客户端,并正在寻找一个占用空间最小的嵌入式数据库,该数据库可以与 Delphi 一起使用,并且非常适合全文搜索(我知道占用空间不大)。理想情况下,它也应该是免费或开源的(我知道要求很高)。

我倾向于SQLite,但我以前没有使用过它,不知道它是否支持全文搜索,或者它与 Delphi 的工作情况如何。我以前使用过DBISAM,它嵌入了全文搜索,但不是免费的。 Firebird是我们考虑的另一个选择。

可能有一种组合可以使这项工作。您会使用什么,以及它对 1) 占用空间、2) 全文搜索、3) 免费/开源的评价如何。

更新:感谢大家的建议。这么多不错的选择可供选择。

4

14 回答 14

8

我使用DiSQLite取得了很大的成功。它具有 FTS 支持和大量其他功能。他们有免费版和专业版。我相信免费版也可以进行 FTS。我已经为 Delphi 尝试了许多 SQLite 实现,这是我见过的最好的。它直接编译到您的应用程序中,因此没有外部 DLL。

我在 Delphi 中查看了很多用于嵌入式数据库的免费库,其中许多不再受支持,从未发布,或者仅在 Delphi5 中工作。

于 2009-03-27T14:49:02.670 回答
4

Sybase Advantage Database Server具有免版税的本地服务器引擎(多线程和记录级锁定)、出色的 Delphi TDataSet 后代组件(包括源代码)和出色的全文搜索引擎。

Advantage 全文搜索支持 AND、OR、NOT 和 NEAR 运算符。Advantage 还提供 SCORE 和 SCOREDISTINCT 标量函数,它们返回搜索条件中所有单词实例的总数。

Advantage 全文索引在记录更新时维护,这意味着它们不需要任何重建。索引采用压缩格式;因此实际的索引大小可以比物理数据小得多。可以对非索引数据执行全文搜索,但这需要对记录数据进行物理搜索,并且速度可能会慢得多。索引搜索使用位图过滤器以获得最佳性能。

在线帮助包含索引选项等所有详细信息:

http://tinyurl.com/ctjoqg

于 2009-03-30T18:22:45.517 回答
3

我知道firebird有用于全文搜索的狮身人面像插件(尽管根据那里的网站,它'远离真正的“全文搜索”'),它是免费/开源的,但我找不到任何信息来说明它是否适用firebird 的嵌入式版本。

于 2009-03-27T10:14:03.300 回答
3

对于 Firebird 全文搜索,请查看:http ://www.firebirdfaq.org/faq328/

莱昂纳多。

于 2009-03-27T11:36:05.287 回答
2

我们已经使用 Hydra 将 DotLucene 集成到了我们内部的一个基于 Delphi 的应用程序中(当时,Mike 做了这方面的工作);如果这是我们想在这里追求的选择,我相信我们可以提取它并使其可用于该项目

于 2009-03-27T10:11:44.023 回答
2

继续使用SQLite。Delphi 有很多免费的 sqlite 组件。其中一些已不再是活跃的项目。但值得注意的一个组件是ZeosDB。ZeosDB 得到积极维护,它的 sqlite 支持也很完美。如果您需要其他数据库引擎支持,ZeosDB 又是您的选择(它支持 MySQL、PostgreSQL、Interbase、Firebird、MS SQL、Sybase、Oracle 和 SQLite)。

于 2009-03-27T16:43:35.047 回答
2

NexusDB 有一个免费的嵌入式版本,当然它是一个原生的 Delphi 产品。

这是它的全文搜索实现的描述。

于 2009-03-28T04:31:31.150 回答
1

我建议应该强烈考虑 DBISAM,或者现在可能是他们更新的 ElevateDB。根据您以前的经验,我希望您知道它不会给您的可执行文件增加太多大小,是相当快速、可靠、完美的基于 Delphi 的解决方案,并且具有出色的支持。多年来,他们的 SQL 方言已经改进,因此现在非常好,高度符合 ANSI SQL-2003。

DBISAM/ElevateDB 不是开源的,但许可成本仅针对每个开发人员(而不是每个部署),因此如果只涉及少数开发人员,则成本(在我看来)可以忽略不计。考虑到您在 DBISAM/Elevatesoft 新闻组上获得的支持和响应水平,许可成本尤其合理,主要开发人员/所有者 (Tim Young) 积极参与回答问题和解决问题。除了专有解决方案的成本之外,当然还有对业务是否能够生存以及产品是否会在未来继续开发和支持的担忧。这是你必须自己权衡的事情,但发展似乎一如既往地强大。他们为他们的数据库提供了 .NET 提供程序,并支持使用 FreePascal/Lazarus 进行跨平台开发。

DBISAM 全文搜索的一个优点是它紧密集成到 SQL 中。也就是说,您可以发出一条 SELECT 语句,直接将某些字段的普通 WHERE 条件与其他字段的全文搜索条件结合起来。根据您的需要,这是一个很好的功能,它可以让使用不同的全文解决方案完成一些需要更多工作的事情变得非常简单和快速。我认为大多数附加解决方案,如 Lucene 和其他可能与 Firebird 一起使用的解决方案,并没有与常规 SQL 紧密集成,并且限制您仅检索具有全文标准的一组记录。类似于 Textolution 的 Firebird 专有插件(http://www.textolution.com/ftsib_example.asp) 看起来它可以容纳构建将应用常规和全文标准的单个复杂(嵌套)查询,但 DBISAM 做得更优雅。无论如何,向开源数据库添加专有插件有点违背了开源的目的。

我认为 DBISAM/ElevateDB 全文搜索的一个缺点是仅支持使用“AND”和“OR”条件,没有任何邻近搜索。

我注意到 SQLite 有一个全文解决方案,http: //www.sqlite.org/cvstrac/wiki?p=FullTextIndex 。我从未使用过 SQLite,但我知道很多人都喜欢它。我很确定 DBISAM/Elevatesoft 具有很大优势的一个领域是在需要强大的锁定功能的多用户应用程序中,尽管这对于单用户桌面应用程序来说并不一定有任何分量。

于 2009-03-27T16:09:39.763 回答
1

我会使用Aducom Sqlite 组件来使用 Sqlite,它们比 DiSQLite 更容易使用 sqlite,免费并且作为 TDataset 组件工作,我会投票支持 sqlite,因为:

  1. 它是非常快速和紧凑的数据库。
  2. 占用空间非常小,只有 200kb 左右的 Dll。
  3. 与 Aducom 组件一起使用时可以静态链接,因此无需分发 dll。
  4. 它内置了对全文搜索的支持。
  5. 它在许多免费和商业应用程序中作为外部存储广泛使用和使用。
  6. 它具有大部分标准 SQL,因此将使用您的大部分 sql 知识。
于 2009-03-28T19:42:37.527 回答
1

Sqlite 几乎只是单用户/单连接。执行更新会锁定整个数据库。您可以通过设置等待其他连接的超时值来处理此问题(默认为无超时)。多用户访问可能会变得非常缓慢和/或频繁超时,具体取决于您使用的值。

我使用了来自http://www.aducom.com/的 Asqlite 组件。免费和开源。目前不支持 d2009 的外观,但它正在开发中。还有许多其他组件集,但我没有使用任何其他组件。

您可以使用 Rubicon(现在在http://www.href.com/rubicon的新管理下)将全文搜索添加到任何 delphi 应用程序。然而,这不是免费的:(

于 2009-03-28T19:52:57.160 回答
0

为什么需要全文搜索呢?我不使用 Twitter,但我相信 Twitter 消息最多 140 个字符?这些将适合一个 varchar 字段。您无需全文搜索即可在此类字段中查找内容。

于 2009-03-27T10:04:40.123 回答
0

还有 DotLucene,它确实需要安装 .NET 框架,但可以通过 .net com api 轻松加载。它是搜索的理想选择,并且具有大多数搜索引擎通用的查询格式。

于 2009-03-27T10:07:09.540 回答
0

我在这里有一个半工作的 Delphi 解决方案:http://sourceforge.net/projects/mutis/,一个到 Lucene 的 Delphi 的端口。

它的大部分工作正常,但不幸的是基于死亡的 Delphi.NET 实现,因此需要更新到本地的工作(是的,采用 .NET 路线是一个大错误:()

于 2009-12-18T18:16:50.467 回答
-1

一路DBISAM。工作,非常扎实,嵌入式,全文索引效果很好(丰富的个人经验!)

ElevateDB 可能也很棒,但我没有直接的经验。

于 2009-03-29T05:20:44.673 回答