【问题标题】:Reporting with db4o使用 db4o 进行报告
【发布时间】:2010-09-09 22:42:48
【问题描述】:

我在过去的许多项目中都使用过 db4o,并取得了很大的成功。随着时间的推移,它似乎有了很大的发展,随着每个人的舌头上像 LINQ 这样的现代趋势,它再次激发了我的兴趣,尤其是现在我知道它开始支持透明的激活和持久性,这让我很感兴趣,但是朋友当我第一次提到 db4o 时向我提出了一个很好的问题,即使有了现代创新,我仍然不知道如何回答。

生成类似于大型跨表复杂约束报告的报告的最佳/最快/最常用方法是什么,可以在 SQL 等平台上如此有效地完成?我非常了解节省了多少时间、精力和开发时间,甚至获得了许多性能提升,尤其是在 ORM 上,但有些应用程序需要复杂的报告,我不知道如何使用对象和对象查询来表达,我也是担心性能,因为即使在专门为此目的设计的系统上优化和维护复杂的报告也可能会让人不知所措。

--
编辑:

更清楚地说,对象数据源等可用于将 db4o 拉入与 SqlDataSource 等相同的数据丰富的控件中。我在 db4o 站点上被提到了关于将它与 ReportViewer 一起使用的文档,并建议我将数据非规范化到报告数据库中,但这个问题意味着对如何完成查询类型提出概念挑战RDBMS 表现如此出色,以至于它们占据了整个行业。我喜欢 db4o,但如果不将所有相关对象从数据库中拉出、激活它们并执行计算,我想不出一种真正有效的方法来报告存在于几种不同类型(或 SQL 中的表)中的聚合数据在应用程序级代码中。我可能错了,但这似乎无法与 RDBMS 的优化竞争。

我希望在我们设法聚集在这里的聪明头脑中,有人知道我不知道的事情,或者对未来的实施有创新的想法,可以扩展 ODBMS 领域。我知道各种 ORM 实现了复杂报告对象的方法,我想知道是否有任何具有这些技术经验的人可能有一些创造性的东西,不依赖于我的代码和 db4o 之外的任何技术(我可以使用单独的 SQL 服务器)。

【问题讨论】:

    标签: design-patterns reporting db4o


    【解决方案1】:

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

    看起来确实不错。甚至还有 report server 和 BI 功能(同样,都是开源的)。因此,有兴趣的人可能值得一看。

    【讨论】:

      【解决方案2】:

      可能还归结为您使用的报告工具。例如,我已经实现了一个项目,它使用 Microsoft 的 Reporting Services 客户端引擎来呈现报告——不依赖于 SQL 服务器——只需为其提供对象。所有的聚合都由报告引擎执行,这意味着您的代码只需要查找和具体化底层对象。

      【讨论】:

        【解决方案3】:

        请参阅this page

        最好的,

        德语

        【讨论】:

        • 会不会是来自 db4o 的德国 Viscuso 进入了 SO?相当讨人喜欢;p。谢谢,这很有用,但我的问题更多是关于似乎受益于 RDBMS 结构(多表/联合/等)的复杂报告的模式。我们将如何替换此功能?为了清楚起见,我将进行编辑
        【解决方案4】:

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

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

        【讨论】:

        • 我知道您在此响应中来自哪里,但是由于 db4o 是一种完全不同的 DB 风格,因此没有必要使用 JDBC,尽管我可以看到它附带的一些简洁的功能,它不适用于 .NET,也不能有效利用 db4o 的功能,这一点很重要。
        • 您仍然会因为努力而获得 +1,并且最接近彻底的回应 :) - CrystalClear 也不太适合这个问题,但感谢您的努力。我想我需要有 db4o 经验的人来回答这个问题。
        【解决方案5】:

        为了解决通过 db4o 报告的性能成本问题,我建议与您的 db4o 容器并行维护一个高度非规范化的(sqlite ?)数据库。针对 db 运行报告,针对 db4o 运行常规应用逻辑。

        是的,它需要更多的工作,但这样您将获得高性能报告,同时保持 db4o 的实用性。

        如果您已正确分离数据访问代码,则应该很容易更新任何保存对象的代码以同时更新报告数据库。

        【讨论】:

        • 感谢您的评论,但这似乎更像是一种 hack 而不是解决方案;如果我将数据运行到 SQL 中,我不妨将数据保存在 SQL 中,而不是冒并发问题等风险;还有,设置好db后,在db4o中保存一个对象就一行,如果使用透明持久化就更少了
        • 这就是我提到“高度非规范化”的原因。我的意思是保留大部分汇总表,其中包含您的报告所需的内容。有点类似于您使用 lucene.net 进行搜索的方式。您需要将其索引与数据库分开维护。
        • 这更像是一种变通方法而不是解决方案;我想知道报告 with db4o 的正确方法,而不是我可以用来解决报告困难的方法。 “适当分离”也与实现相关,db4o 受益于不同的抽象技术
        【解决方案6】:

        我对这个问题的有限理解是,由于缺少一些功能,例如 Count、Aggregate 等,目前使用 DB4O 很难进行报告。就目前而言,您必须自己实现这些性能不佳的暗示(例如激活所有记录,然后对记录执行计数操作)。

        【讨论】:

        • 这个问题似乎主要与设计报表相关,与设计关系报表的方式相同。我认为解决这个困境的方法是记住我们没有使用 RDBMS,我们必须考虑一种新方法,而不是在圆孔中安装方形钉。
        猜你喜欢
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多