java学习、java教程:5种Java数据计算层的解决方法

原创 2016年05月31日 09:22:49

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星。调式功能完善,而且使用非常方便,可以观察到最细粒度的计算步骤。其他数据计算层远远达不到这种方便性。

SQL

SQL/SP/JDBC在这里属于一类,这是老牌的数据计算层,性能和灵活性是它的优势。但随着新情况的不断出现,单纯用SQL已经难以满足需求,比如: JAVA开发规模的扩大,数据量的剧增,复杂计算问题的涌现。虽然SQL得高分的指标不多,但都是权重最高的。

成熟度:5星。最成熟的。

低耦合性:0星。耦合性极高。除了在实验室之外,几乎不可能写出与数据库无关,与代码无关的计算脚本。

脚本编写:3星。SQL实际很难写出也很难维护,需要大量的时间去学习,好在SQL非常成熟,资料丰富论坛很多。但各种数据之间的不兼容也是个巨大的障碍,这是Hibernate之所以流行的主因。

集成:5星。JAVA程序员的第一课就是用JDBC连接数据库。

界面友好性:5星。有大量的SQL开发工具,成熟度都很高,我自己用过不下10种。

性能:5星。数据库直接支持的语言,性能最高。

复杂计算:3星。SQL适合普通的计算问题,可以解决复杂问题但非常困难(而Hibernate是完全不能)。SP的出现并不能有太大的改善。代码难以拆分,复杂目标难以分解为简单步骤是主因。

大数据支持:1星。个别数据库厂商表示已经支持大数据了,但这让SQL语句的不兼容程度加剧了,而且我也没见过成功案例。

非数据库计算:1星。不直接支持。采用ETL/数据仓库可以达到这个目的,但代价巨大。

跨库计算:1星。个别数据库支持,但性能较差,也可以采用DBLink和link server等中间件勉强支持,但离“自由方便”的程度还差得远。

调式方便性:1星。很难调试,难以观察中间结果,只能全部执行完才能看到最终计算结果。唯一的办法是“以调试为目标进行编程”,即刻意建造大量临时表。

iBatis:

简单敏捷因此强大的数据计算层。和Hibernate不同,它鼓励写SQL,所以学习成本最低。同时它用最小的代价实现了计算脚本和JAVA代码的解耦,只用20%的代价就实现了hibernate 80%的功能。另外没实现的20%是计算脚本和数据库的解耦。

复杂计算环境是它的弱项,比如:分布式计算、复杂计算、非数据库计算、跨库计算。

成熟度:4星。iBatis经过了十几年市场的考验,是我最喜欢的框架之一。但对缓存的支持不足仍然是缺陷。

低耦合性:2星。SQL可以无缝替换,但仍然是针对具体数据库的SQL。事实上后者是数据库的问题,厂商要粘住客户,所以SQL不兼容,让你难以迁移;但程序员不愿让粘住,非要迁移。

脚本编写:3星。它就是SQL。

集成:4星。基本没有难度,初学者半天时间都可以熟练掌握。

界面友好性:4星。没有图形化计算过程设计界面,但可以借用SQL工具。

性能:3星。性能比SQL略低,主要是resultSet和map/list之间转化需要多花费一点时间。另外缓存支持不如hibernate好。综合比起来两者区别不大。其实我认为引入ORM的同时引入性能问题就是失败的。

复杂计算:3星。同SQL,比hibernate强。

大数据支持:1星。同SQL

非数据库计算:1星。同SQL

跨库计算:1星。同SQL

调式方便性:1星。同SQL

R语言

R语言不易和JAVA集成,但强大的计算能力和广泛的社区支持,以及大数据的特性使我不得不提到它。另外跨库的计算、非数据库的计算、模型计算也是它的强项。当然,在各种数据计算层中,它也是最难学习的。

成熟度:5星。R语言的历史仅次于SQL。无数的社区在热烈讨论R。尤其是大数据时代。

低耦合性:4星。R语言和集算器在这方面没区别。

脚本编写:3星。这方面R和集算器很像,区别是集算器更敏捷代码更灵活,对结构化数据的支持更专业,而R内置了大量模型算法。所以基本持平。

集成:1星。R不是JAVA架构,很难集成进JAVA,本来性能就不高,集成后性能更是大幅度降低。

界面友好性:3星。有专门的IDE界面,但很粗糙,实际价值不大,这也是开源产品的通病。

性能:2星。全内存运算,难以应付大数据量。

复杂计算:5星。同集算器类似。

大数据支持:3星。有R与Hadoop的结合机制,但JAVA体系与非JAVA体系之间的结合并不容易,性能损失较大。

非数据库计算:5星。同集算器类似。

跨库计算:5星。同集算器类似。

调式方便性:2星。勉强算有调试功能,但很不专业。

学习有困难可以加扣:578024144进行交流还可以关注微信公众号:javaniuniu获取免费得听课权限!



相关文章推荐

5种java数据计算层的解决方法

原帖:http://datamachine.iteye.com/admin/blogs/1965609,重新编辑整理了一下。 数据计算层是指介于数据持久层和应用程序层之间,负责计算来自数据持...

Java学习(二)——mysql插入中文数据、中文数据乱码的解决方法

1.在mysql中用命令:show variables like 'character'; 查看所用字符集,如下: 2.在mysql安装文件夹下的my.ini文件中添加:       [clien...

【fastweixin框架教程3】JAVA进行HTTPS网站访问,PKIX path building failed解决方法

上几篇文章我们谈到fastweixin使用问题和修改。   今天的问题就是使用JAVA访问HTTPS网站时候经常出现javax.net.ssl.SSLHandshakeException javax....

Docker学习总结(24)——在Docker中监视Java应用程序的5种方法

说明:根据国外https://www.javacodegeeks.com/2017/07/docker-monitoring-5-methods-monitoring-java-application...

Java的时间类型数据使用Json字符串传输时变成一串数字的解决方法

终于有时间来写一下这几天的收获了,这几天一直在帮一个研究生完成他的毕业设计,他的毕业设计主要是做一个灌溉系统,该项目使用SSM框架开发,但我还没有系统学习框架,之前对于一个需求都是严格按照MVC设计模...
  • caibaoH
  • caibaoH
  • 2017年08月08日 22:08
  • 360

关于java接收前台$.ajax格式为多维json数组数据为null的原因及解决方法

本文介绍了使用java接收前台$.ajax数据格式为多维json数组数据时数据值为null的原因以及解决方法。...

java post数据服务器拒绝的解决方法

当我们采用post数据的时候有可能会遇到这种情况服务器返回403错误。这里只要我们设置一下UA欺骗一下服务器就可以了。有时候设置了windowNT的时候没有办法解决记得设置一下linux下面的。这里给...

java乱码解决方法

  • 2013年08月05日 14:42
  • 90KB
  • 下载

JAVA导出数据到excel中大数据量的解决方法

web项目中需要有将数据导出excel的操作需求。曾经尝试过几种方法: 1、poi导出到excel 他是操作对象然后将结果写到excel中。 2、拼excel的html形式文件,将文件扩展名改为xls...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java学习、java教程:5种Java数据计算层的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)