Java Persistence API (JPA)是存取Java关系数据的企业级标准。JPA为Java对象映射到数据库图解提供支持,包括一个简单的API设计和查询语言的表达,查询语言的表达是为了检索来自数据库映射的结果,并且因为这个结果改变回执 。JPA通过书写以及维护他们自己的映射代码、允许存在单一的API而不管平台、应用服务器或者提供持久执行为开发者提高生产率。这些高速缓存解决方案允许经常的存取实体到存储器,可以减少到数据库查询的次数和大量花费在转换数据库查询结果到对象上的处理时间。高速缓存可以深入的积极的对应用性能产生影响。
JPA和数据网格
数据网格是运行在有代表性的低耗硬件群集上面的软件,支持数据存贮和处理服务。数据网格产品聚集了处理能源和存储群集服务的能力,使得客户端通过API可以使用它,API是为防护设计的,避免分布式计算的复杂。数据网格作为可伸缩的分布式存储被普遍运用;无论如何,分布式数据处理也是常见的特性。作为存储器,数据网格提供一种方法来超越单一服务器因为堆栈大小的限制,这个解决办法就是通过分布式数据存取所有的集群服务器。
尽管他们在专业技术领域内的应用被限制。但是在当今企业应用中,与数据网格相关的话题仍然层出不穷。数据网格已经成为一种主流,当开发应用程序的时候,开发者需要考虑网格架构,并且意识到在未来,网格在应用程序中的应用比例会被提高。
考虑一个银行系统,通过在写入数据库前确认所有项目来处理存款和撤销请求。确认的内容也许包括帐目是否有效、提出请求的是否是户主、账户上是否有户主要求提取的存款数额等等。你可以想象,在这样一个系统中还有很多需要确认的地方。你需要从数据库中读取数据总和,数据总和执行一个确认的单一请求是有重要意义的,并且会引起很多查询。幸运的是,在JPA中创建这样一个以数据库为中心的应用程序是非常简单的。绘制领域内的每一个classe到数据库,并且书写必要的JP QL查询来检索确认的对象。系统也许不得不从数据库读取大量的数据来处理每一个请求,但是它运作的很好。
现在,如果我们需要显著的提高这个系统的生产力,我们不得不解决它唯一但是最大的瓶颈:通过查询数据库得出确认数据。大多数JPA执行不是提供一个L2存储功能,就是支持第三方L2存储功能的整合。但是,如果我们不得不处理大量随机到达的请求,在存储器中拥有必须的参考数据是不太可能的事情。存储器在你重复的存取一些数据是非常的有效。如果你存取的是随机数据,存储器不太可能储存你当即所需要的数据。当然,你可以不停的增加存储器的容量来满足你的需求,但是每一个服务器只能拥有这么多的堆栈。
数据网格提供一种方法来超越单一服务器因为堆栈大小而产生的限制以及在集群服务器上分布存储对象。现在要面临的挑战是将数据网格技术与JPA融合,从而能够提高生产力,而不需要完全改写应用程序。当然,作为软件系统的代表性案例,有很多案例是接近一体化的,每一个都伴有各自的优势劣势。让我们来看看整合的体系架构以及我们应该如何使用。
数据网格作为中间级别的对象存储
像我们前面所提到的,数据网格产品可以扩展存储,存取一个集群,并且可以作为一个共享的中间存储使用。他们提供一个单一的逻辑堆栈,可以从物理层面进行扩展,这种扩展是伴随着全部的存储容量在多重服务器上实现的,全部的存储容量是包括所有的群集服务器的堆栈。在例子当中,这意味着通过增加更多的服务器到网格,它的存储容量可以增加,要点是所有的确认数据必须预先加载(通常是“加热”存储器)。自从确认数据的存取成为我们的瓶颈,存取所有的必须数据在实际上消除了这个问题。
举例来说,在我们的银行系统中,考虑一个简单的可以确定的方法:
public boolean isValidAccount(Request request) {
Account account = entityManager.find(
Account.class, request.getAccountId());
if (account == null) {
return false;
} else {
return account.isValid();
}
}