DB4O 可扩展性

Posted

技术标签:

【中文标题】DB4O 可扩展性【英文标题】:DB4O scalability 【发布时间】:2011-07-07 16:19:52 【问题描述】:

我正在寻找有关 DB4O 对象数据库的信息。我知道它有客户端/服务器模式,但我不知道它的可扩展性如何。我非常喜欢对象数据库的想法,但仍然找不到合适的 OODB 用于我的任何项目。所以我的问题是:

我很想知道是否有人在多客户端环境中部署了 DB4O,与 RDBMS 相比,它的性能如何? 迄今为止是否有任何 Web 应用程序由 DB4O 提供支持? 我可以使用 DB4O 替代 SQL Server(至少是 SQL Express)吗? DB4O 在实践中可以支持多少并发客户端? DB 大小增加时性能会降低吗?

谢谢

附:我对 C# 版本感兴趣。

【问题讨论】:

下载试用版并进行基准测试? OODB 革命发生了什么?我们得到了喷气背包的承诺。 @Mitch Wheat 您甚至不需要获得试用版。它是开源的! @Hans Passant:你没有收到你的 JetPack 吗? ;) 【参考方案1】:

我总体上同意 Vagaus 和其他 cmets。 db4o 在某些情况下可以替换,但这确实取决于您的场景。对象数据库只是一种工具,并不能满足所有需求。您可能应该尝试一下。

我只是想添加几个cmets:

多客户端环境:db4o 的重点是嵌入式模式。客户端/服务器模式更像是一个插件,而不是真正的默认模式。 db4o 期望客户端和服务器是“强”耦合的:客户端和服务器需要相同的类,否则会发生灾难。此外,db4o 服务器不支持多数据库、用户管理等内容。 SQL Server 的替代品(至少是 SQL Express):当然不是大型 SQL Server。需要比 db4o 更强大的对象数据库。 db4o 更像是 express 版本。 当数据库大小增加时性能是否会下降:是的,就像所有数据库一样。 db4o 是为小型数据库构建的。对于 db4o,大约 2-16 GB 的大小是合适的。 并发控制:db4o 对客户端-服务器模式的并发控制非常有限。它只支持相对较弱的“Read Committed”隔离模式。

如前所述,db4o 是为嵌入式场景设计的。对于更大的客户端服务器数据库,您可能需要查看其他(对象)数据库。

【讨论】:

在开发过程中使用 db40,然后切换到使用 nhibernate 的 sql server 是否有意义。如果您的目标是确保在开发过程中您有一个可以轻松地在机器之间浮动的项目?甚至 SQLExpress 似乎都让我头疼,试图从工作到家,再到路上的笔记本电脑等...... 嗯,这有点危险:您可以找到抽象来切换存储(使用 LINQ-IQuerable + 简单接口)。但是,您建立在不同的假设和隐含行为之上。例如,性能特征不同。稍后,当您切换时,您可能已经找出并修复了一些东西。但当然,db4o 非常适合进行原型设计和启动。【参考方案2】:

简短回答:是的,db4o 可以用作 RDBM 的替代品

长答案:视情况而定。

我真的不相信“一刀切”,所以恕我直言,这取决于您的对象模型、访问模式、机器配置、数据库调整、预期增长率、索引数量等。

我能想到的最佳建议已经在 cmets 中提出:不要将任何答案视为确定/可靠(即使是我的 ;-));使用尽可能接近实际应用程序的对象模型/访问模式进行自己的性能测量并得出结论。

话虽如此,如果您想查看一些基准测试结果,可以查看polepos 结果。但是请注意,这些结果是基于旧版本的 db4o(6.4 而不是当前版本 7.12)——我们希望在不久的将来发布新的结果。

我确定有使用 db4o 的 Web 项目(例如 jease),但我不确定具体如何。

即使 db4o 性能不能满足您的要求,我也建议您不要放弃 OODB(通常它会使您的实时 - 开发变得更加容易)。在这种情况下,请检查其他选项(例如 VOD - 来自同一供应商)。

【讨论】:

以上是关于DB4O 可扩展性的主要内容,如果未能解决你的问题,请参考以下文章

如何规避大型嵌入式 db4o 数据库的大文件

db4o 如何保持性能

关于db4o的透明激活与激活声明

db4o官方停止支持及面向对象数据库的一些感想

db4o这个对象数据库有很多优点,但为什么不是很火? 大家有没有用过db4o的?

db4o 客户端/服务器似乎一次只能处理一个查询?