我正在Spring Boot(Spring + Hibernate + MySQL)中创建一个webapp。
我已经为我的应用数据创建了所有CRUD操作,现在我需要处理数据并创建报告。
根据这些报告的复杂性,我将创建一些摘要或预先处理的表。通过这种方式,我可以触发一次创建报告,然后有效地进行报告。
我怀疑是否应该用Java或MySQL中的存储过程构建所有报告。
在Java中使用它的优点:
在Java中使用它的缺点:
对此有何想法?
谢谢!
答案 0 :(得分:1)
Java的。虽然两者都有可能。这取决于最重要的是什么,可用于维护的技能和维护的价格。存储过程通常非常快,但可用性和性能还取决于您使用的确切数据库。您将需要特殊技能,然后您可以使用该特定数据库。
Hibernate确实为每个数据库编写了一个特殊的方言,以便从持久层中获得最佳性能。它不像存储过程那么快,但它非常接近。有了Spring Data,所有的困难都消失了。维护成本不会那么高,了解Spring Data的人比任何特殊的数据库供应商都更有用。
您仍然可以使用HQL轻松创建各种“困难”查询,因此不会阻止。但是Hibernate带来了更多的可能性。您可以通过eh-cache完成缓存,使用Hibernate envers,您可以立即完成审核。对于这个框架来说,这是件好事。它被广泛使用,许多免费使用maven依赖项是有的。如果将来要更改数据库,可以在使用Spring Data时通过更改application.properties文件中的3个参数来实现。
您可以使用一些注释,看看哪些效果更好。例如,您有@Inheritance注释,您可以将某些类放在同一个表中,或将其拆分为更多表。您还有@MappedSuperclass,其中您可以拥有一个具有所有实体可以扩展的id的JpaObject。如果你想在JPA上有更多技巧,可以用我的答案检查this post如何使用超类和通用存储库。
答案 1 :(得分:1)
根据这些报告的复杂性,我将创建一些摘要或 预先处理的表格。这样,我就可以触发创建报告 一次,然后有效地获得它们。
我的第一个想法是,这需要吗?似乎增加了可能不需要的应用程序的复杂性。过早优化和所有这些。尝试在SQL中编写报告并运行执行计划。如果它足够好,您可以维护较少的代码,也无需管理添加的批处理作业。考虑使用E.G.进行负载测试。 jmeter或gatling看看它在压力下如何保持。
考虑使用querydsl或jooq进行报告。两者都提供了一个数据库抽象层和用于查询数据库的流畅API,这些API提供了在Java中实现它的优点所列出的好处"问题的一部分,可能更适合这个问题。这篇博文jOOQ vs. Hibernate: When to Choose Which非常值得一读。