16

显然,BDB-XML 至少从 2003 年就已经存在,但我最近才在 Oracle 的网站上偶然发现它:Berkeley DB XML。这是简介:

Oracle Berkeley DB XML 是一个开源、可嵌入的 XML 数据库,可以基于 XQuery 访问存储在容器中并根据其内容编制索引的文档。Oracle Berkeley DB XML 构建在 Oracle Berkeley DB 之上,并继承了其丰富的特性和属性。与 Oracle Berkeley DB 一样,它与应用程序一起运行,无需人工管理。Oracle Berkeley DB XML 在 Oracle Berkeley DB 的基础上添加了文档解析器、XML 索引器和 XQuery 引擎,以实现最快、最有效的数据检索。

在我看来,基本思想在技术上是合理的,并且可能比新的基于文档的数据库(如 CouchDB 或 MongoDB)更成熟。据我所知,它支持 C、C++、Ruby 和 Perl。它甚至具有 HA 功能,例如使用具有自动选举功能的主/从模型进行自动复制。

但是,我似乎找不到任何使用它的项目。它有什么根本性的问题吗?许可证太繁琐?是不是太复杂了?

为什么不被使用?

4

8 回答 8

47

我曾经是 Oracle Berkeley DB 产品的产品经理。我已经在这些 BDB 数据库上工作了八年多了,我写了你复制到你的问题中的“模糊”。

在商业上,我们用于(非详尽列表,就在我的脑海中):

  • Autodesk 在 Mapquest 中使用 BDB XML
  • Farelogix 将 BDB XML 用于预订系统
  • 喜达屋酒店使用 BDB XML 来管理他们管理的酒店的信息
  • 瞻博网络在 NetScreen 安全管理器中使用 BDB XML
  • 由于合同限制,许多我无法命名...
  • 等等...

Berkeley DB XML 在开源世界中相对被忽视,我不知道为什么。有几个项目在这里和那里都使用过它,我所知道的没有什么公开的。我最近确实看到了一篇关于如何在 Emacs 中使用 BDB XML 的精彩博客文章。设置完成后,您可以在文本编辑器中以交互方式在 XML 上运行 XQuery 语句。也就是说,它非常适合商业和开源使用。

XQilla 是由 BDB XML 工程师从我们多年来共同编织的其他几个 XML 项目中创建的一个项目。我们开源(Apache 2.0 许可)XQilla,因为它是一个很棒的 XQuery 和 XML 解析库。我们是一家数据库公司,所以在解析 XML 并将其组织到我们的 btree 数据库中的部分,以及查询优化、索引、统计和大量其他代码的工作是 XQilla 下的内容,但是上面 BDB 的 btree 将两者粘合到 BDB XML 中。如果它解决了您的问题,请随意使用它,那里根本没有数据库。

从头开始为 XML 构建的产品通常在其核心具有一些事务性数据结构,用于管理磁盘上的信息。我们在 Berkeley DB 中尚未完成并在 Berkeley DB XML 中使用的优化不多。要说从头开始构建的用于管理 XML 的数据库将比 BDB XML 好得多,就是说 Berkeley DB 缺少一些东西,我认为这里没有站得住脚的论据,但我愿意了解是否有人拥有关于 BDB 尚未实现的对高效 XML 存储至关重要的并发事务数据结构的信息。

eXist 是一个 Java XML 数据库,如果您愿意,我们有一个 Java JNI API,而且我们通常在性能、稳定性和可扩展性测试中击败 eXist。

Sedna 是一个很好的 XML 数据库,它是 Apache 2.0,所以它不是双重许可,它只是 FLOSS 软件。我建议您将它与 BDB XML 进行基准测试,您可能会感到惊讶。

MarkLogic 是一个很棒的 XML/XQuery 数据库服务器,他们构建了一个非常可靠的产品。它不是软件库,而是服务器。BDB XML 和 MarkLogic 之间存在显着差异,但它们都是商业可用的 - 只有 BDB XML 是开源的。

有人提到 Elliot Rusty Harold 的关于 XML 数据库状态的博客,请注意它大约是 2007 年 - 嘿,这不是在任何 NoSQL 数据库存在之前吗?;-)

看看 Kimbro Staken 的旧但仍然相关的评论由 Oracle 变成了白皮书),它很好,但也过时了。“为您的 XML 数据使用原生 XML 数据库:确定基于 XQuery 的原生 XML 数据库何时优于 SQL 数据库”

多年来真正的权威一直是Ron Burrett。关于这个话题,他有很多话要说。

MongoDB 和 CouchDB 处于不同的细分市场。他们进行分布式、分区、最终一致的 BASE 样式(非 ACID)数据管理,有些人认为他们做得很好。我认为他们还年轻,陪审团还在外面。他们有一个良好的开端,我希望他们继续发展,数据存储是一件很难做到的事情,而且一个大小并不适合每个人的问题/需求。BDB XML 的分布式故事基于单主、多副本始终一致(如果您愿意)基于日志的复制和当主失败时基于 PAXOS 的选举算法。我们不对数据进行分区,每个节点都包含相同的数据(整个数据库)。我们不允许在任何地方写入,只允许在 master 处写入。我们不仅支持 TCP/IP 进行复制(见鬼,如果需要,您可以使用为您的服务器定制的硬件总线)。我们构建了 HA 产品来解决读取可扩展性、系统可用性和容错问题。NoSQL 的分布式系统专为随处写入分区数据管理而设计。选择是好的,对吧?:)

XML 作为数据模式和 XQuery 作为访问和管理 XML 内容的语言已经并将继续是一个非常成功的解决方案。如今,在使用 NoSQL 解决方案的更多公共网站中可能没有那么多(这很好,对我来说很有趣),但在文档管理、金融、基因组学、生物信息学、数据交换、消息传递等等方面更是如此。与 SQL/关系产品相比,XML 可能是一个小众数据库,但它肯定比对象数据库或块 NoSQL 数据库解决方案的任何新手更成功。每个存储解决方案都有它的位置,XML 将在很长一段时间内继续做有用的事情。

归根结底,我希望您选择一个适合您需求的数据库。

于 2010-06-14T22:36:42.573 回答
7

要记住的一件事是 Berkeley DB 的许可证。除非您打算开源您的项目,否则您需要从 Oracle 购买许可证,这就是为什么我怀疑您看不到更多内容的原因。否则,所有 Berkeley DB 数据库都非常出色。我倾向于将它们用于我不打算分发的任何东西(在内部项目中)。

于 2009-10-05T16:35:39.887 回答
4

根据我的经验,Berkeley DB XML 有很多承诺和很多相关用例。但是你应该小心不要期望它在所有情况下都有效。请注意,最后一个版本是 2009 年 12 月 22 日的 Berkeley DB XML 2.5.16。

如果您为您的用例正确配置它,它所基于的技术 Berkeley DB 非常强大且速度极快。有许多细节需要正确处理(例如启用事务、日志记录、了解使 MVCC 工作所需的所有标志)。我相信大多数人都会因为这种复杂性而遇到问题。

不过,我遇到了其他一些缺点。最大的一个是查询计划器在排序时不会使用索引。这意味着你不能做一个相当常见的数据访问模式,它相当于:

SELECT * FROM table ORDER BY time DESC LIMIT 100;

如果您这样做,Berkeley DB 将在订购前检查磁盘上的所有时间值,当您超过几万个节点时,这会使其变慢。其他人也在这里报告了这一点:

https://forums.oracle.com/forums/message.jspa?messageID=9754987#9754987

您也可以直接枚举任何索引,但是您将失去执行临时查询的能力。

论坛上还报道了一些与索引类型和性能相关的奇怪行为:

https://forums.oracle.com/forums/message.jspa?messageID=9753022#9753022

因此,虽然基于密钥的访问快速且可靠,但要小心其不成熟的查询规划器。

于 2012-05-04T18:17:54.017 回答
3

取决于你的需求是什么。我不会推荐一个原生 xml 数据库而不是另一个,但我可以告诉你,出版业是整个行业的一个例子,它几乎放弃了关系数据库,并将大量时间转移到原生 xml 数据库来处理其出版物的内容. 最突出的(也是最昂贵的)是来自 MarkLogic 的那个。eXistDB 是一个开源的,似乎受到了一些关注。

这是杰出的 xml 专家 Elliot Rusty Harold 撰写的一篇关于此主题的优秀文章。 http://cafe.elharo.com/xml/the-state-of-native-xml-databases/

于 2009-10-01T14:15:07.620 回答
3

最好的[*] XML 存储库是从头开始构建以支持 XML 的存储库,例如MarkLogiceXist

但是,BDB-XML 的存储引擎是古老的 Berkeley DB 引擎,它是最广泛使用的嵌入式数据库引擎之一。它体积小、速度快且稳定。

BDB-XML本身当然是一个有能力的产品。它以前以 Sleepycat 的名义出售,如果这有助于您找到任何参考资料。它是 BDB 存储引擎与XQilla XQuery 引擎的组合。

此外,您可能会在搜索XQilla时找到更多信息。这是一个相当强大的引擎,并且仍然是开源的。

[*] 当然,“最好”是一个主观术语。

于 2009-10-01T14:28:42.853 回答
1

所以总而言之,这些都是 BDB-XML 似乎没有被广泛使用的原因:

  • 只允许内置的本地数据库(尽管有做主从复制的规定)
  • 不可免费用于商业用途
  • 许多从头开始构建以支持 XML 的竞争产品

似乎没有任何理由不使用它,但同样也没有什么能让它在竞争中脱颖而出。最重要的是,最近的比赛更多的是“哦,闪亮!” 吸引力和 XML 数据库本身仍然是一个利基市场。

于 2009-10-08T10:27:27.053 回答
-1

我最近也遇到了同样的情况,遇到了Sedna XML dbms。

于 2009-10-06T13:44:57.590 回答
-7

“它有什么根本性的问题吗?”

是的。它是 XML。

不幸的是,这意味着发明它的人并没有费心去看看已经存在的概念和技术的力量,比如关系代数和关系微积分。

比那些做得更好并不是一件容易的事(这是礼貌的说法),到目前为止,所有尝试过的人都失败了。

这应该告诉你一些事情。

于 2009-09-30T16:24:05.770 回答