在这个架构中所有的JPA操作用于替代数据网格JPA操作通常会使用SQL用于数据库这包括所有的查询和所有的更新根本上我们用数据网格完全的取代数据库伴随着JP QL转换支持尽管数据存储是专门在中间层操作我们仍然可以继续使用JPA为我们设计API对于系统而言不需要长期持久的存储这是理想状态如果要求更多的存贮或者查询性能你可以简单的增加服务器到网格
数据库——依靠数据网格
即使所有的查询和更新执行都朝着不利于数据网格的方向发展它仍然有可能融入到一个持久存储器数据库在这个构架当中网格负责传递网格中的操作性能到数据库比如说输入一个对象到网格将会引起数据库的INSERT操作这个架构的优势是数据仍然可以频繁使用而更新会返回到数据库并且可以报告目的等等理想的情况下网格操作不会同步传递到数据库这样的话会明显地减弱生产力异步书写更新到数据库可以保持网格的灵敏性并且支持持久性存储的要求
混合以及匹配——多种结构
迄今为止我们把数据网格作为JPA的存储器对待并且认为JPA是数据网格上层的API标准这个架构之间的不同点实在不明显对于新对象来说归结到配置上面要看JPA是否是首先书写在数据库上然后写入数据网格或者是否它仅仅是写在网格上面处理更新以及删除操作时候的逻辑与上面相同就像我们看到的查询操作也与此类似如果我们可以设置如何在一个实体对实体的基础上读取输入查询我们就可以混合这些架构考虑存储器与应用程序之间的往来在这样一个应用程序中你可以得到持久的实体但是你也会得到短暂的实体为了一个持久的实体实体级别的架构可以使得JPA使用数据网格作为存储器
按照数据网格修改JPA
如果顺利的话把JPA与数据网格相结合是很有可能的并且可以通过提供快速存取来提升系统的生产力从而在中间层进行数据管理但是他们也为JPA应用程序提供测量标准与普通方法相比它的可测量性更显着
传统意义上提高JPA应用程序的应用率需要提高应用群集上服务器的数量使用下载平衡来均匀的分布工作但是当你提高群集的大小发现这个群集大小是受你限制的限制它可以存储的内容而不需要引进进程之间的通道和连接更新然后共享数据可以传递到所有的群集服务器来确定JPA存储器不包含陈旧的数据对于一个伴随着N个服务器的群集来说这意味着每一个更新将会产生N个信息当你增加群集中服务器的数量每一个服务器处理一个单一的同步更新的花费依据(N)⊃这样的速率增加因为任何一个更新发生每一个服务器都必须与其它所有的服务器通信更糟糕的是伴随着群集的增长每一个服务器都不得不花费大量的可用处理时间来解决新到达的更新信息那些非线性的通信以及更新处理成本意味着群集JPA应用程序的传统方法利用存储器可以很好的工作他们受限于小到中型号的群集
通过拥有一个可共享副本数据网格能够解决通信上的问题这个副本来自所有服务器的易存取的对象一个更新操作是不需要依赖于将信息传递到所有服务器的因为在下次他们需要更新对象的时候是可以跟上变化的在一个数据网格中伴随着可升级的点对点通信架构(即不需要中心信息就可以打破瓶颈)一个更新是依赖于到服务器的通信的这是个存储对象的服务器或者是一个存储备份的服务器这种情况下存取每个服务器单一的同步更新上的通信花费是可以用线性函数C(N)描述的C是副本(基本的以及备份的)数量的持续反映这种线性更新的花费意味着通过使用数据网格来扩展群集有可能实现评测JPA应用程序以及达到更高的生产力
质疑
当然网格上的JPA从来都不缺乏挑战第一条就是开发者对于对象关系映射非常的熟悉JPA无疑会被认为缓存疲劳这是存储器带来的最常见的问题缓存疲劳有两个原因第三方更新数据库以及JPA应用程序运行在其他服务器群集上实现更新操作处理第三方更新问题与处理处理数据网格没有什么不同大多数JPA执行提供一系列的技术来处理这些问题包括驱逐规则查询恢复原则以及针对极易变更的数据废除存储的能力这已经是一个陈旧的话题数据网格不会特别的复杂化
就像之前讨论的那样缓存疲劳影响更新使得在其他群集服务器中使用传统的解决方法也就是通过信息解决尽管它有自己的限制再高处理速率的系统中信息顶层是非常重要的JPA应用程序趋向于把缓存的使用降至最低依赖数据库来确定他们是不是将数据更新具有讽刺意义的是处理速率提高以及存储器价值的提高经常是有缺陷的因为维护存储器持续运作的花费实在是太高了实际运用数据网格来删除信息以及更新处理情况意味着高速处理系统可以利于存储器达到甚至是超越生产力而不需要管理缓存疲劳
查询是另一个挑战JPA界定了JP QL的多种用途在很多方面与SQL是相似的包括很多相同的小细节JP QL的目标是提供一个以对象为基础的查询语言可以简单的转换为执行在关系数据库上的SQL当然数据网格不是关系数据库每一个数据网格拥有自己的查询框架JP QL可以被转化的范围以及在特定网格上面的执行都要依靠网格查询框架的性能
另一个挑战来自关系对象JPA支持很多的关系类型除了嵌入式对象通过数据网格产品关系对象的支持呈现各种不同的形式每一个都有细微的差别焦点包括哪一种类型的关系对象可以支持;对象之间是否可以通过网格关联或者更多的是驻扎在一点;在关系对象中哪一种查询操作是被支持的最后一个问题的答案明显对于哪一种JP QL查询可以执行有重大影响
这个列表很明显是不全面的但是它提炼了对PA/data网格整合有影响的问题中的精华部分
结论
数据网格不是关系数据库所以我们不能期望JPA与数据网格之间有一个完美的契合但是即便有很多限制网格上面的JPA也是令人激动的技术它提供了一种方法进化JPA应用程序使其站在槓桿的另一端撬动数据网格能够创建可升级的高速率系统