Reporting with db4o过去,我在许多项目上使用db4o都取得了很大的成功。随着时间的流逝,它似乎已经发生了很大的变化,并且随着像LINQ这样的现代趋势在每个人的舌头上再次引起了我的兴趣,尤其是现在我知道它开始支持透明的激活和持久性,这使我颇为着迷,但是一个朋友当我第一次提到db4o时,对我提出了一个很好的问题,即使有了现代创新,我仍然不确定如何回答。 生成类似于大型跨表复杂约束报告的报告的最佳/最快/最常用方法是什么,可以在诸如SQL的平台上如此有效地完成报告?我非常了解节省了多少时间,精力和开发时间,甚至节省了许多性能,尤其是通过ORM而言,但是有些应用程序需要复杂的报告,我不确定如何使用对象和对象查询来表达,我也担心性能,因为即使在专门为此目的设计的系统上,优化和维护复杂的报告也可能是不堪重负的。 - 更清楚地说,对象数据源等可用于将db4o拉入与SqlDataSource等相同的数据丰富的控件中。我曾在db4o网站上看到有关将它与ReportViewer一起使用的文档,并建议将数据非规范化到报告数据库中,但是这个问题的意思是对如何完成查询类型提出概念性挑战。 RDBMS的表现如此出色,以至于他们掌握了该行业。我喜欢db4o,但我想不出一种真正有效的报告存在于几种不同类型(或SQL中的表)中的聚合数据的方法,而无需将所有相关对象从数据库中取出,激活它们并执行计算在应用程序级代码中。我可能是错的,但这似乎不希望与RDBMS可能的优化竞争。 我希望在我们设法聚集的聪明人当中,有人知道我不了解的东西,或者对将来的实现有创新的想法,这些想法可以扩大ODBMS领域。我知道各种ORM都会为复杂的报告对象实现方法,并且我想知道是否有任何使用这些技术的经验的人可能会具有某些创意,而这些创意并不依赖于我的代码和db4o之外的任何技术(我可以使用仅SQL Server)。 请参阅此页面。 最佳, 德语 为了解决通过db4o报告的性能成本,我建议与db4o容器并行维护一个高度非规范化(sqlite?)数据库。针对db运行报告,针对db4o运行常规应用程序逻辑。 是的,这还需要更多工作,但是通过这种方式,您可以在保持db4o有用性的同时获得高性能的报告。 如果已正确分离了数据访问代码,则应该很容易更新任何保存对象的代码,也可以更新报告数据库。 它也可能归结为您使用的报告工具。例如,我已经实现了一个项目,该项目使用Microsoft的Reporting Services客户端引擎来呈现报告-不依赖SQL Server-仅提供对象。所有的聚合都是由报告引擎执行的,这意味着您的代码仅需要查找并具体化基础对象。 我对db4o不熟悉。但是我知道一些报告软件。其中一些具有数据接口,您可以编写自己的连接器,例如i-net Crystal-Clear。如果您可以查询简单对象的简单列表(字符串,数字,...),那么它很简单。 另一个简单的解决方案是编写一个虚拟JDBC驱动程序。有一个示例。您要在db4o上运行的查询将作为虚拟存储过程提供。使用可选参数,可以在db4o上过滤数据以获得最佳性能。这样的虚拟JDBC驱动程序可以编写3-4个小时。 我对该问题的有限理解是,由于缺少诸如Count,Aggregate等功能,目前很难使用DB4O进行报告。就目前而言,您必须自己实现这些性能差的性能暗示(例如,激活所有记录,然后对记录执行Count操作)。 为时已晚,对您没有用。但我建议发现此问题的人员可能希望查看Jasper Reports。该产品有一个"商业"版本。但是,它实际上是一个开放源代码解决方案,可以在sourceforge上找到。 似乎实际上还不错。甚至还有一个报表服务器和BI功能(同样,都是开源的)。因此,对于有些感兴趣的人可能值得一看。 |