使用db4o进行报告

7
我过去在许多项目中都成功地使用了db4o。随着时间的推移,它似乎有了很大的发展,并且像LINQ这样的现代趋势已经引起了我的兴趣,特别是现在我知道它开始支持透明激活和持久性,这让我非常感兴趣,但当我第一次提到db4o时,一个朋友向我提出了一个非常好的问题,即使有现代创新,我仍然不确定如何回答。

生成类似于SQL平台上可以有效完成的大型交叉表复杂约束报告的最佳/最快/最常用方法是什么?我非常清楚地了解节省了多少时间、精力和开发时间,甚至了解了许多性能收益,特别是相对于ORM而言,但是一些应用程序需要复杂的报告,我不确定如何使用对象和对象查询来表达,并且我也担心性能问题,因为即使在专门设计用于此目的的系统上,优化和维护复杂报告也可能会使人不知所措。

--
编辑:

更明确地说,可以使用对象数据源等将db4o拉入与SqlDataSource等数据丰富的控件相同的范畴。我已被引荐到关于使用ReportViewer的db4o网站文档,以及建议将数据非规范化到报告数据库中,但是这个问题旨在提出一个概念上的挑战,即如何完成RDBMS所执行的那些类型的查询,它们在行业中占据着重要地位。我喜欢db4o,但我无法想出一种真正有效的方法来报告跨越多种不同类型(或SQL中的表)的聚合数据,而不必将所有相关对象从数据库中拉出、激活并在应用程序级别代码中执行计算。我可能是错的,但这似乎无法与RDBMS可能实现的优化竞争。

我希望在我们聚集在这里的聪明头脑中,有人知道我不知道的东西,或者有创新的想法,可以扩大ODBMS领域。我知道各种ORM实现了复杂报告对象的方法,我想知道有没有任何使用这些技术的经验的人,他们有没有依赖于我的代码和db4o之外的任何技术的创造性东西(我可以仅使用SQL服务器生成报告)。

6个回答

2
为了解决通过db4o报告的性能成本,我建议在与db4o容器并行维护高度去规范化(sqlite?)数据库。对数据库运行报告,对db4o运行正常应用逻辑。
是的,这样做需要更多的工作,但这样做可以保持db4o的有用性同时获得高性能的报告。
如果您已经正确分离了数据访问代码,那么更新保存对象的任何代码以更新报告数据库应该很容易。

谢谢您的评论,但这似乎更像是一种hack而不是解决方案;如果我正在将数据输入SQL,那么我可能会将我的数据保留在SQL中,而不是冒并发问题等风险;此外,在设置了数据库之后,在db4o中保存对象只需要一行代码,如果使用透明持久性甚至更少。 - TheXenocide
1
这就是为什么我提到了“高度去规范化”。我的意思是保持大多数只包含报告所需内容的摘要表。有点类似于您使用lucene.net进行搜索的方式。您需要将其索引与数据库分开维护。 - David Thibault
这更像是一种权宜之计,而不是解决方案。我想知道与db4o一起报告的正确方法,而不是我可以用来绕过难以报告的东西。另外,“适当分离”相对于实现而言是相当主观的,db4o受益于不同的抽象技术。 - TheXenocide

2

德国的 Viscuso 从 db4o 转到了 SO?相当令人高兴;p。谢谢,这很有用,但我的问题更多地涉及复杂报告的模式,这些报告似乎受益于 RDBMS 结构(多表/联合等)。我们将如何替换此功能?我会编辑以明确。 - TheXenocide

1

这也可能取决于您使用的报告工具。例如,我实施了一个项目,该项目使用微软的报告服务客户端引擎来呈现报告 - 不依赖于SQL服务器 - 只需提供对象即可。所有聚合都由报告引擎执行,这意味着您的代码只需要找到并实现底层对象即可。


1
我的有限理解是,目前在DB4O上报告非常困难,因为缺少一些功能,比如Count,Aggregate等。就目前而言,您必须自己实现这些功能,而这会导致性能不佳(例如,激活所有记录,然后对记录进行Count操作)。

这个问题似乎主要与以关系型报表设计相同的方式设计报表有关。我认为解决这个困境的方法是记住我们不是使用关系型数据库,而是要考虑一种新的方法,而不是把方形钉子塞进圆孔里。 - TheXenocide

1

我不熟悉db4o,但我了解一些报告软件。其中一些具有数据接口,您可以编写自己的连接器,例如i-net Crystal-Clear。如果您可以查询简单对象(字符串、数字等)的普通列表,则很简单。

另一个简单的解决方案是编写虚拟JDBC驱动程序。有一个示例可供参考。您想要在db4o上运行的查询将作为虚拟存储过程可用。使用可选参数,您可以在db4o上过滤数据以获得最佳性能。这样的虚拟JDBC驱动程序可以在3-4小时内编写完成。


我理解你在这个回答中的观点,但因为db4o是一种完全不同风格的数据库,使用JDBC是不必要的。虽然我可以看到它带来的一些很棒的功能,但它不适用于.NET,并且不能有效地利用db4o的能力,这是很重要的。 - TheXenocide
你的努力还是值得肯定的,虽然没有完全回答问题 :) - CrystalClear 对这个问题也不太正确,但感谢你的努力。我认为我需要有 db4o 经验的人来回答这个问题。 - TheXenocide

0

对于你来说,这可能太晚了。但我建议那些发现这个问题的人可以看看Jasper Reports。该产品有一个“商业”版本。然而,它实际上是一个开源解决方案,可以在sourceforge上找到。

看起来它实际上非常不错。甚至有一个report server和BI功能(同样,全部都是开源的)。因此,对于一些稍微感兴趣的人来说,这可能值得一看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接