5种java数据计算层的解决方法
作者:网络转载 发布时间:[ 2013/11/21 13:31:30 ] 推荐标签:
数据计算层是指介于数据持久层和应用程序层之间,负责计算来自数据持久层的数据,并将计算结果返回应用程序层的层次。JAVA的数据计算层主要是为了降低应用程序层和数据持久层之间的耦合性,分担它们的计算压力。
它应当符合如下特征:
1.可以统一的计算来自任意数据持久层的数据,不仅包括数据库,也包括非数据库的Excel/Txt/XML。其中对常见的结构化数据的计算是重点。
2.可以统一的进行不同种类数据源之间的相互计算。不仅包括异种数据库之间,也包括数据库和非数据库之间的计算。
3.数据库和计算层、计算层和JAVA代码之间要有尽量低的耦合性,可以方便移植。
4.可以是非JAVA架构,但必须能和JAVA方便的集成。
5.要有较高的开发效率,包括脚本编写,可读性,调试,日常维护。
6.复杂计算目标和大数据计算是流行趋势,数据计算层应该能直接支持。
考察了5种数据计算层:Hibernate,集算器,SQL,iBatis,R languae。考察的指标包括:成熟度、低耦合性、脚本编写、集成、界面友好性、性能、复杂计算、大数据支持、非数据库计算、跨库计算、调试方便性。
Hibernate
Hibernate是轻量级的ORM框架,由Gavin King创造,现在属于JBOSS。它是非分布式环境中(intranet)中的数据计算层。它具有彻底的基于对象的访问方式,而集算器和iBatis只能算半对象或类对象。
Hibernate几乎做到了计算脚本、JAVA代码、数据库之间的彻底解耦。但计算能力不足使它仍然在很多地方依靠SP/SQL,这是个尴尬的问题。
另外EJB的JPA属于数据计算层协议,但考虑到Hibernate是实际上的JPA,所以不介绍它了。
成熟度:4星。经过10多年的市场检验,Hibernate已经非常成熟。
低耦合性:4星,这是Hibernate出现的原因。但本地SQL仍然是不可避免的,难以完美移植。
脚本编写:2星。Hibernate的计算方式是对象引用和HQL,前者容易,给5星;但后者的学习难度比SQL高,而且调试极困难,开发效率不如SQL,2星;另外有些计算还是不得不依靠SQL,2种语言混用,困难,给2星。平均3星。
集成:2星。Hibernate是纯java架构,只需要复制jar包和N个映射文件,并利用好session,入门比较容易。但驾驭Hibernate的缓存是必修课,这需要极高的架构设计能力,不建议普通程序员接触。当然,ORM的这种天生的缺陷在其他数据计算层并不存在。
界面友好性:0星。Hibernate有对象生成器;但缺乏重要的HQL图形化设计界面,等于没有GUI。
性能:3星。支持3级缓存,虽然一定不如SQL,但据我个人经验其综合性能达到了SQL的60%。
复杂计算:0星。不支持复杂计算。需要依靠SQL/外部工具实现。
大数据支持:1星。不直接支持hadoop架构,但有人在研究。
非数据库计算:0星。不直接支持非数据库的计算。
跨库计算:0星。不直接支持库间的计算。每个HQL只支持单库。
调式方便性:0星。很难调试,对程序员来讲,这是致命的。
集算器
集算器是近出现的新型JAVA计算层,擅长复杂的、跨库的计算。和其他数据计算层不同,集算器只是将SQL作为一种数据源,而取到数据后的计算则完全和SQL无关。PJA/hibernate则被迫开放SQL接口,用来实现自己处理不了的计算。
成熟度:1星。在市场出现仅1年,应用的广度和深度都不如其他数据计算层。
低耦合性:4星。脚本独立于数据库和Java代码,算法和具体数据库无关,耦合性低。可以轻松移植到不同的数据库。因为输出接口为JDBC,所以也可以轻松移植到报表,这是其他数据计算层所不具备的特征。
脚本编写:4星。脚本写在网格中,单元格可以按格名调用,可以直接观察每一步的计算结果,复杂目标可以分解为简单步骤。但它的语法偏向对象引用(但不是对象),与偏向描述语句的SQL风格不同,需要学习。不过JAVA程序员到底喜欢哪一种,还很难说。
集成:5星。集算器是纯JAVA架构,输出JDBC接口,集成不需要学习。用过任何一种数据库的程序员都可以无障碍使用。
界面友好性:4星。独立的图形化编辑器,使用方便直观。但帮助系统不够友好。
性能:2星。全内存计算,数据量不能太大。
复杂计算:5星。这是集算器出现的原因。
非数据库计算:3星。支持Excel/Txt,但不支持xml或webService.
大数据支持:4星。能访问HDFS,同步宣称支持并行计算,但细节还不太了解。
跨库计算:5星。集算器语法与具体数据库无关,天生支持跨库计算。
调式方便性:5星。调式功能完善,而且使用非常方便,可以观察到细粒度的计算步骤。其他数据计算层远远达不到这种方便性。

sales@spasvo.com