`
OneAPM_Official
  • 浏览: 24674 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何借助 NoSQL 提高 JPA 应用性能

    博客分类:
  • java
阅读更多

【编者按】关注 NoSQL 的动态发展很重要。NoSQL 的好处并不仅限于新的应用开发。在某些案例中,你可以见识到重新访问现有的、传统的框架带来的积极效果,比如说你的 JPA 的实现。本文系国内 ITOM 管理平台 OneAPM 编译呈现。

多年以前,笔者在为一家世界顶级汽车公司做电子商务网站项目时,曾经碰到过一个听起来像科幻故事的概念:通过实体类别来自动实现数据持久存储。

是的,笔者说的就是现在大家都知道的分布式组件标准(Enterprise JavaBeans)。发布于1998年,后来被并入 Java EE 的技术规范,它引入了实体(Entity Beans)的概念。当时的想法是提供一个开发框架,让开发者可以将他们的对象自动映射到相关表格,这样该框架就可以在数据库中持续自动将应用程序数据持久存储。这被称为 ORM:对象关系映射。

当时是21世纪初,大家还习惯于等待当时最牛的太阳微系统公司(Sun Microsystem)——跟现在苹果公司的地位差不多——带来各种重大发明,不过那可真的是模式的变更。它是紧跟面向对象编程(Object Oriented programming)出现的概念,不过它本身对主流应用开发世界来说就是一个重大的模式转变。当时,在一个集中的数据库中持久存储数据的概念已经得到广泛接受,关系数据库也有很多。服务器端 web 应用开始成为主流,当然,你还得选择存储数据的数据库,虽然关系数据库并不是唯一的选择,但它们是当时所谓的“桌面应用”的首选。这些都表明,应用存储和检索数据的唯一方式是通过执行 SQL 查询。在很多情况下,这种操作是非常复杂的。

与之相反,Java 完全是面向对象的,不会被理解为表格和关系。关系数据库很容易就能被其他过程式语言借助 SQL 来采用。当时,Java 还饱受微软和太阳间的诉讼的影响,该诉讼涉及到 Java 和 IE 间的兼容性。开发者们都在讨论哪个平台或者框架能够胜出:Java 还是微软新发布的 .NET

在这种背景下,EJB 提出的自动持久存储是个令人欣喜,同时又极富创新的概念。不过,当时的硬件现实条件摆出了一个挑战:虽然这个概念不错,但是当时的处理硬件尚未准备好。Java 的问题已经足够证明,被认为是“老派做法”的运行解释代码并不会降低所有进程的速度。在 EJB 要求的多层额外管理中执行这样的代码,更是超出想象。还有别忘了,我们说的是32位单核处理器时代,高端服务器的内存也不过 256 MB 到512 MB!(参考 topdesignmag.com

时间快进到2016年,Hibernate 已经发布了第5版,根据最新调查,超过73%的 Java 开发是在某个 Java EE 框架下进行的。

自2009年起,随着 JPA 2.0 的规范出台,越来越多的应用从这种抽象概念中受益。Gavin King 于2001年开发的 Hibernate ORM 得到广泛使用,更是起到了推动作用,这是由前 EJB2 式实体类别提供的更简单的持久化能力实现方法。由于被认证为2010 JPA 2.0 规范的一种实施方法,Hibernate 成为应用开发者们广泛推崇和使用的技术。

然而,发布15年以来,开发者论坛关于最初主题的讨论依然有很多:如何改善 JPA 的性能表现。虽然硬件速度有了很大提升,同样的问题依然存在。如今 JPA 成了主流技术,影响着世界上数以万计的系统,这个问题就变得更加重要。ORM 架构内在的问题并没有改变:将面向对象的世界映射到关系世界并不是个小任务,需要付出大量的额外努力才能实现无缝对接。

很多年前,Ted Neward 把 ORM 称为“计算机世界的越南”,把它跟收益递减规律联系在一起:一开始看起来很好,但是你用得越多,要获得额外收益就越难。在某些时候,因为前期已经付出了资金和时间,你很难“放弃诱饵,转身跑掉”。他甚至还建议同时使用 ORM 方案和直接的 SQL 方案(或者 JDBC),这样“就可以绕过那些 ORM 会带来麻烦的地方”。这跟性能表现有很大关系。

jhades.org 的成员在他们的博客中提出了一个很好的观点,他们说,ORM 给自己带来的主要问题是挑战(实时)同步两个完全不同的数据结构。表格、关系和面向对象这几个数据结构之间并没有什么相似性。结果就是,传统的关系数据库管理系统在所有的 ORM 实施过程中的表现都有所降低,就是因为 SQL 与这些受益于 ORM 的应用之间没有相似性,也就是所谓的领域驱动设计(Domain Driven Design)。

但是如今,整个数据库产业都在经历变革。过去15年来,你得很有勇气,才敢避开关系数据库管理系统,使用其他备选方案来持久存储数据——如果你能找到的话,更不要说你还要费尽力气解释自己为什么要这么做。如今,大量 NoSQL 数据库增加了计算机科学出现更多新模式的可能性。说 JPA 不能从中受益简直是大错特错,而且笔者认为它绝对能从中受益。从数据结构的观点来看,要在 JPA 实现方法中持久存储数据,很多 NoSQL 方法都更合理,效果也比表格或关系数据管理系统更好。

笔者的研究似乎表明这是真的。我们最近基于自己的键值存储(key-value store,缩写为 KVS)数据库引擎 c-treeACE V11 发布了一个新的 JPA 实现方法。最初的测试结果表明,在使用 c-treeACE 替代 SQL 数据库后,性能提升了30%。

实现这种效果是通过有效利用一种智能映射方法,能够识别出那些可以在低层级 KVS 中执行的检索,从而避免繁冗、不必要的 SQL。由于 c-treeACE 是一种多模式数据库,与数据库互动的层(Java 持久存储层,缩写为 JPL)能够在 SQL 和 NoSQL 之间自如转换,从而优化每次 query.z 的执行。

如何借助 NoSQL 提高 JPA 应用性能

总之,关注 NoSQL 的各种动态发展很重要。NoSQL 的好处并不仅限于新的应用开发。在某些案例中,你可以见识到重新访问现有的、传统的框架带来的积极效果,比如说你的 JPA 的实现。无论你是用 Hibernate,或者其他 ORM 框架,数据库替换都会是一个低风险、小投入的项目。你可能会发现,你很快就能节省几千美元。

OneAPM 能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/how-to-improve-performance-of-your-jpa-application

 

 
分享到:
评论

相关推荐

    Spring Data JPA中文文档[1.4.3].zip

    12. **性能优化**:包括缓存策略、批处理更新和读取、懒加载等提高性能的方法。 13. **最佳实践**:了解在实际项目中使用Spring Data JPA时的一些推荐做法,避免常见的陷阱和问题。 14. **扩展和自定义**:如果...

    DataNucleus JPA/JDO访问mysql示例

    在IT领域,数据库管理和数据访问技术是至关重要的部分。在这个示例中,我们将探讨如何使用DataNucleus框架通过Java ...通过深入研究提供的示例代码和文档,你将能够将这些知识应用到自己的项目中,提高开发效率。

    spring boot与cassandra集成,使用JPA方式。

    而Cassandra,作为分布式NoSQL数据库,因其高可用性和可扩展性,在大数据场景下广泛应用。 首先,让我们了解Spring Boot如何与Cassandra建立连接。在Spring Boot项目中,你需要在`pom.xml`或`build.gradle`文件中...

    spring3+springmvc+jpa+hibernate多数据源

    在本项目中,数据源被配置为Hibernate和Datastore,这可能意味着应用同时支持传统的RDBMS(关系数据库管理系统)和NoSQL数据库。多数据源的配置通常涉及到数据源的切换策略、事务管理以及如何根据业务逻辑选择合适的...

    springboot集成mybatis、jpa、redis、mongodb,对不同数据库进行操作的实例.zip

    在"springboot_database-master"这个项目中,你将找到一个完整的示例,展示了如何在Spring Boot应用中同时使用MyBatis、JPA、Redis和MongoDB。项目中包含了各个组件的配置文件、实体类、Mapper接口、Repository接口...

    SpringBoot-JPA-MongoDB:SpringBoot-JPA-MongoDB

    综上所述,"SpringBoot-JPA-MongoDB"项目展示了如何在Spring Boot应用中利用JPA的抽象和Spring Data MongoDB的功能,实现对MongoDB数据库的有效管理和操作。通过这种方式,开发者可以充分利用Spring Boot的便利性和...

    springmvc-jpa-springdata:使用Hibernate作为JPA实现和PostgreSQL数据库的Spring Data

    在本项目中,"springmvc-jpa-springdata" 是一个基于Java的Web应用程序,它利用了Spring MVC、JPA(Java Persistence API)以及Hibernate作为JPA的具体实现,与PostgreSQL数据库进行数据交互。这个项目的核心是构建...

    mysql_json_JPAmysqljson_mysqljsonjpa_MYSQL_mysql支持json_

    虽然JPA最初设计是为处理传统的关系型数据,但随着NoSQL和JSON的流行,JPA也开始支持这些非传统数据模型。在JPA中,可以使用`@ColumnTransformer`注解配合转换器来处理JSON字段。 **3. 使用`@Convert`注解** 在JPA...

    仓库管理系统,SpringBoot+Spring Data JPA+......zip

    Spring Data JPA则是Spring Framework的一个模块,主要目标是提供一个统一的接口来访问各种持久化存储系统,如关系数据库、NoSQL数据库等。它极大地简化了数据访问层的编码工作,通过简单的注解,开发者可以轻松地...

    High-Performance.Java.Persistence

    缓存可以减少对数据库的直接访问,从而显著提高应用性能。此外,作者还涵盖了事务隔离级别和并发控制,这些都是确保数据一致性和完整性的关键要素。 针对高性能需求,书中详细讲述了JPA的性能调优技巧,包括查询...

    Spring Data.zip

    9. 性能优化:通过配置JPA的实体缓存、第二级缓存等机制,可以提高应用程序的性能。 10. 数据库供应商兼容性:Spring Data JPA支持多种JPA实现,如Hibernate、EclipseLink等,可以根据项目需求选择合适的ORM框架。 ...

    Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例

    本文的知识点涵盖了如何使用Spring Data JPA、...这不仅能够帮助用户更好地浏览和管理数据,而且能够提高后端服务的响应速度和系统性能。对于正在开发中的项目,这些技术的运用能够大幅度提升开发效率和系统的可靠性。

    springboot系统学习,包括整合mybatis,整合jpa,整合mongodb,redis,es等等.zip

    这个压缩包提供了一个全面的 SpringBoot 学习路线,涵盖了从关系型数据库到 NoSQL 数据库,再到搜索引擎的多种集成方案,对于理解和掌握 SpringBoot 在实际项目中的应用非常有帮助。每个模块的学习都需要理解相关的...

    Java数据库应用程序编程指南

    7. **连接池**:在实际应用中,为了提高性能和资源管理,通常会使用连接池(如C3P0、HikariCP、Apache DBCP)。连接池预先创建并管理数据库连接,避免频繁创建和关闭连接。 8. **ORM框架**:Java还有许多Object-...

    KunderaTest:这只是一个使用Maven + Kundera + JPA的测试

    **KunderaTest详解** ...通过深入研究这个项目,开发者可以学习到如何在实际应用中结合Maven、Kundera和JPA,以及如何编写针对NoSQL数据库的测试用例。这有助于提升在分布式、高性能环境下的数据管理能力。

    springboot_springdataJPA_queryDSL_mongodb_demo:源码主要用于学习SpringBoot + MongoDB项目构建,内容包括使用Spring Data JPA持久化数据,使用QueryDSL态动条件投影查询数据,以及使用swagger2组件调试RESTful API

    MongoDB则是一个高性能、无模式的NoSQL数据库,适用于处理大量非结构化或半结构化数据。在Spring Boot应用中,我们使用Spring Data JPA的MongoDB支持,通过注解驱动的方式,轻松地进行数据的CRUD操作。Spring Data ...

    spring 4.X企业应用实战

    Spring作为Java领域最流行的轻量级框架之一,它的4.x版本进一步提升了性能,优化了API,并引入了一些新的特性,使得它在现代化的开发环境中更具竞争力。这本书旨在帮助开发者充分利用Spring 4.x的功能,构建高效、可...

    java数据库编程指南

    理解连接池的工作原理和配置方法,能有效优化应用性能。 4. ORM(Object-Relational Mapping)框架:Hibernate和MyBatis是常用的ORM框架,它们将Java对象映射到数据库表,简化了数据库操作。学习如何配置和使用这些...

    Rapid Java Persistence and Microservices.pdf

    您将在高性能环境中介绍Spring和JPA中的数据访问和查询模式。作为本主题的一部分,您将看到Java中多个持久性框架的优点,尤其是NoSQL数据库和反应式Web解决方案提供的持久性。 最后几章介绍了一些高级概念,这些概念...

Global site tag (gtag.js) - Google Analytics