对于数据规模复太大的,做成制任务。
用户点击导出,检查他的数据规模,超过50W的,提示其数据规模过大,可能需要 N 小时完成,请稍候再来查询和下载导出结果。如果用户点击确定,你就提示:“任务已进入队列,点击此连接查询导出进度。”
然后你要做两件事情:
1、给这个用户记录个标识,就是他已经启动某导出任务,不能再启动新的了(或者限制一个人最多同时启动几个导出任务);
2、后台有个调度程序,开始执行导出工作,并将生成的Excel放在某磁盘目录或存在数据库中;这个调度任务可以控制下最大同时并发的导出任务数,以避免任务太多拖垮系统。
另外需要开发界面查询导出进度以及下载导出结果。导出结果可以考虑一个最大保存周期,比如7天。
Ⅱ java中大量数据如何提高性能
通过使用一些辅助性工具来找到程式中的瓶颈,然后就能对瓶颈部分的代码进行优化。一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程式的性能。而一个设计良好的程式能够精简代码,从而提高性能。
????下面将提供一些在JAVA程式的设计和编码中,为了能够提高JAVA程式的性能,而经常采用的一些方法和技巧。
????1.对象的生成和大小的调整。
????JAVA程式设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例)。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程式的性能带来非常大的影响。
????例1:关于String ,StringBuffer,+和append
????JAVA语言提供了对于String类型变量的操作。但如果使用不当,会给程式的性能带来影响。如下面的语句:
????String name=new String("HuangWeiFeng");
????System.out.println(name+"is my name");
????看似已非常精简了,其实并非如此。为了生成二进制的代码,要进行如下的步骤和操作:
????(1) 生成新的字符串 new String(STR_1);
????(2) 复制该字符串;
????(3) 加载字符串常量"HuangWeiFeng"(STR_2);
????(4) 调用字符串的构架器(Constructor);
????(5) 保存该字符串到数组中(从位置0开始);
????(6) 从java.io.PrintStream类中得到静态的out变量;
????(7) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
????(8) 复制该字符串缓冲变量;
????(9) 调用字符串缓冲的构架器(Constructor);
????(10) 保存该字符串缓冲到数组中(从位置1开始);
????(11) 以STR_1为参数,调用字符串缓冲(StringBuffer)类中的append方法;
????(12) 加载字符串常量"is my name"(STR_3);
????(13) 以STR_3为参数,调用字符串缓冲(StringBuffer)类中的append方法;
????(14) 对于STR_BUF_1执行toString命令;
????(15) 调用out变量中的println方法,输出结果。
????由此能看出,这两行简单的代码,就生成了STR_1,STR_2,STR_3,STR_4和STR_BUF_1五个对象变量。这些生成的类的实例一般都存放在堆中。堆要对所有类的超类,类的实例进行初始化,同时还要调用类极其每个超类的构架器。而这些操作都是非常消耗系统资源的。因此,对对象的生成进行限制,是完全有必要的。
????经修改,上面的代码能用如下的代码来替换。
????StringBuffer name=new StringBuffer("HuangWeiFeng");
????System.out.println(name.append("is my name.").toString());
????系统将进行如下的操作:
????(1) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
????(2) 复制该字符串缓冲变量;
????(3) 加载字符串常量"HuangWeiFeng"(STR_1);
????(4) 调用字符串缓冲的构架器(Constructor);
????(5) 保存该字符串缓冲到数组中(从位置1开始);
????(6) 从java.io.PrintStream类中得到静态的out变量;
????(7) 加载STR_BUF_1;
????(8) 加载字符串常量"is my name"(STR_2);
????(9) 以STR_2为参数,调用字符串缓冲(StringBuffer)实例中的append方法;
????(10) 对于STR_BUF_1执行toString命令(STR_3);
????(11)调用out变量中的println方法,输出结果。
????由此能看出,经过改进后的代码只生成了四个对象变量:STR_1,STR_2,STR_3和STR_BUF_1.你可能觉得少生成一个对象不会对程式的性能有非常大的提高。但下面的代码段2的执行速度将是代码段1的2倍。因为代码段1生成了八个对象,而代码段2只生成了四个对象。
????代码段1:
????String name= new StringBuffer("HuangWeiFeng");
????name+="is my";
????name+="name";
????代码段2:
????StringBuffer name=new StringBuffer("HuangWeiFeng");
????name.append("is my");
????name.append("name.").toString();
????因此,充分的利用JAVA提供的库函数来优化程式,对提高JAVA程式的性能时非常重要的.其注意点主要有如下几方面;
????(1) 尽可能的使用静态变量(Static Class Variables)
????如果类中的变量不会随他的实例而变化,就能定义为静态变量,从而使他所有的实例都共享这个变量。
????例:
????public class foo
????{
??????SomeObject so=new SomeObject();
????}
????就能定义为:
????public class foo
????{
??????static SomeObject so=new SomeObject();
????}
????(2) 不要对已生成的对象作过多的改动。
????对于一些类(如:String类)来讲,宁愿在重新生成一个新的对象实例,而不应该修改已生成的对象实例。
????例:
????String name="Huang";
????name="Wei";
????name="Feng";
????上述代码生成了三个String类型的对象实例。而前两个马上就需要系统进行垃圾回收处理。如果要对字符串进行连接的操作,性能将得更差,因为系统将不得为此生成更多得临时变量,如上例1所示。
????(3) 生成对象时,要分配给他合理的空间和大小JAVA中的非常多类都有他的默认的空间分配大小。对于StringBuffer类来讲,默认的分配空间大小是16个字符。如果在程式中使用StringBuffer的空间大小不是16个字符,那么就必须进行正确的初始化。
????(4) 避免生成不太使用或生命周期短的对象或变量。对于这种情况,因该定义一个对象缓冲池。以为管理一个对象缓冲池的开销要比频繁的生成和回收对象的开销小的多。
????(5) 只在对象作用范围内进行初始化。JAVA允许在代码的所有地方定义和初始化对象。这样,就能只在对象作用的范围内进行初始化。从而节约系统的开销。
????例:
????SomeObject so=new SomeObject();
????If(x==1) then
????{
??????Foo=so.getXX();
????}
????能修改为:
????if(x==1) then
????{
??????SomeObject so=new SomeObject();
??????Foo=so.getXX();
????}
????2.异常(Exceptions)
????JAVA语言中提供了try/catch来发方便用户捕捉异常,进行异常的处理。不过如果使用不当,也会给JAVA程式的性能带来影响。因此,要注意以下两点:
????(1) 避免对应用程式的逻辑使用try/catch
????如果能用if,while等逻辑语句来处理,那么就尽可能的不用try/catch语句。
????(2) 重用异常
????在必须要进行异常的处理时,要尽可能的重用已存在的异常对象。以为在异常的处理中,生成一个异常对象要消耗掉大部分的时间。
????3. 线程(Threading)
????一个高性能的应用程式中一般都会用到线程。因为线程能充分利用系统的资源。在其他线程因为等待硬盘或网络读写而 时,程式能继续处理和运行。不过对线程运用不当,也会影响程式的性能。
????例2:正确使用Vector类
????Vector主要用来保存各种类型的对象(包括相同类型和不同类型的对象)。不过在一些情况下使用会给程式带来性能上的影响。这主要是由Vector类的两个特点所决定的。第一,Vector提供了线程的安全保护功能。即使Vector类中的许多方法同步。不过如果你已确认你的应用程式是单线程,这些方法的同步就完全不必要了。第二,在Vector查找存储的各种对象时,常常要花非常多的时间进行类型的匹配。而当这些对象都是同一类型时,这些匹配就完全不必要了。因此,有必要设计一个单线程的,保存特定类型对象的类或集合来替代Vector类.用来替换的程式如下(StringVector.java):
????public class StringVector
????{
??????private String [] data;
??????private int count;
??????public StringVector()
??????{
????????this(10); // default size is 10
??????}
??????public StringVector(int initialSize)
??????{
????????data = new String[initialSize];
??????}
??????public void add(String str)
??????{
??????// ignore null strings
??????if(str == null) { return; }
??????ensureCapacity(count + 1);
??????data[count++] = str;
??????}
??????private void ensureCapacity(int minCapacity)
??????{
????????int oldCapacity = data.length;
????????if (minCapacity > oldCapacity)
????????{
??????????String oldData[] = data;
??????????int newCapacity = oldCapacity * 2;
??????????data = new String[newCapacity];
??????????System.array(oldData, 0, data, 0, count);
????????}
??????}
??????public void remove(String str)
??????{
??????if(str == null) { return; // ignore null str }
??????for(int i = 0; i < count; i++)
??????{
????????// check for a match
????????if(data[i].equals(str))
????????{
??????????System.array(data,i+1,data,i,count-1); // data
??????????// allow previously valid array element be gc
Ⅲ JAVA开源大数据查询分析引擎有哪些方案
大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS、Map-Rece、 Bigtable被称为云计算底层技术三大基石。GFS、Map-Rece技术直接支持了Apache Hadoop项目的诞生。Bigtable和Amazon Dynamo直接催生了NoSQL这个崭新的数据库领域,撼动了RDBMS在商用数据库和数据仓库方面几十年的统治性地位。FaceBook的Hive项 目是建立在Hadoop上的数据仓库基础构架,提供了一系列用于存储、查询和分析大规模数据的工具。当我们还浸淫在GFS、Map-Rece、 Bigtable等Google技术中,并进行理解、掌握、模仿时,Google在2009年之后,连续推出多项新技术,包括:Dremel、 Pregel、Percolator、Spanner和F1。其中,Dremel促使了实时计算系统的兴起,Pregel开辟了图数据计算这个新方 向,Percolator使分布式增量索引更新成为文本检索领域的新标准,Spanner和F1向我们展现了跨数据中心数据库的可能。在Google的第 二波技术浪潮中,基于Hive和Dremel,新兴的大数据公司Cloudera开源了大数据查询分析引擎Impala,Hortonworks开源了 Stinger,Fackbook开源了Presto。类似Pregel,UC Berkeley AMPLAB实验室开发了Spark图计算框架,并以Spark为核心开源了大数据查询分析引擎Shark。由于
Ⅳ Java EE开发中大数据处理用什么技术最好
本身你的问题就不具体
你怎么让别人跟你讲具体呢
大数据处理无非就是以下大类
集群分散处理
缓存
异步处理
也就是说,java web端要用集群做负载,将高并发分散到不同的服务器去处理
那么,由于数据量可能非常大,还需要有单独的缓存服务器,将session,数据库等缓存到某服务器(缓存服务器只对内存有要求,CPU及硬盘要求不高)
之势就是异步处理数据了,比如说某个界面可能要一次查一万条数据,你可以在前面用ajax一次查100,异步的查出来增加到界面,用户是感觉不出来的
Ⅳ 如何处理java web项目中大数据量处理问题
既然是异步处理,那就是不和客户的请求同时进行,所以也和session无关了。异步处理也版和EJB没关系。权
1。当客户请求数据操作的时候,你的javabean把请求存放到文件里面,然后就可以返回response给客户了。
2。自己做一个application program,是thread,隔一段时间监听那个文件(或者一个目录),如果发现有新的文件,就读取出来,根据要求进行长时间操作。操作完毕,更新一个flag A(可在数据库,可在文件),并且把操作的文件remove(以免重复对此文件操作)。
3。客户总会不定时刷新页面或者发新页面请求,这时候就察看flag A,如果完成,就在页面上提示用户,就如msdn的“你有短消息“
Ⅵ 使用java开发B/S的大数据分析软件 应该用什么框架新手勿喷
在大数据处理分析过程中常用的六大工具:
Hadoop
Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。
HPCC
HPCC,High Performance Computing and Communications(高性能计算与通信)的缩写。1993年,由美国科学、工程、技术联邦协调理事会向国会提交了逗重大挑战项目:高性能计算与 通信地的报告,也就是被称为HPCC计划的报告,即美国总统科学战略项目,其目的是通过加强研究与开发解决一批重要的科学与技术挑战问题。HPCC是美国 实施信息高速公路而上实施的计划,该计划的实施将耗资百亿美元,其主要目标要达到:开发可扩展的计算系统及相关软件,以支持太位级网络传输性能,开发千兆 比特网络技术,扩展研究和教育机构及网络连接能力。
Storm
Storm是自由的开源软件,一个分布式的、容错的实时计算系统。Storm可以非常可靠的处理庞大的数据流,用于处理Hadoop的批量数据。Storm很简单,支持许多种编程语言,使用起来非常有趣。
Apache Drill
为了帮助企业用户寻找更为有效、加快Hadoop数据查询的方法,Apache软件会近日发起了一项名为逗Drill地的开源项目。Apache Drill 实现了 Google's Dremel.
据Hadoop厂商MapR Technologies公司产品经理Tomer Shiran介绍,逗Drill地已经作为Apache孵化器项目来运作,将面向全球软件工程师持续推广。
RapidMiner
RapidMiner是世界领先的数据挖掘解决方案,在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛,包括各种数据艺术,能简化数据挖掘过程的设计和评价。
Ⅶ 怎样使用Java 开发大数据
未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而Java最大的优势就是它在大数据领域的地位,目前很多的大数据架构都是通过Java来完成的。
在这个Android、iOS相继没落,PHP相继饱和的时候,只有Java大数据保持着旺盛的需求。那么,Java大数据需要学习什么技术呢?
首先我们要学习Java语言和Linux操作系统。很多人入门编程语言就是Java,你或许还不知道Java的方向有JavaSE、JavaEE、JavaME,学习Java大数据需要学习JavaSE、JavaEE。了解Java怎么连接数据库,掌握JDBC,学习Hibernate/Mybatis的原理,以及API,这样可以增加你对Java操作数据库的理解,因为这两个技术的核心就是Java的反射加上JDBC的各种使用。
接下来就需要学习Linux操作系统,因为大数据相关软件都是在Linux上运行的,学好Linux对你快速掌握大数据相关技术有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本,这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
最后当然是Hadoop的学习,这几乎已经成为大数据的代名词,Hadoop里面包括组件HDFS、MapRece和YARN,HDFS是存储数据的地方,就像电脑的硬盘一样,文件都存储在这个上面,MapRece是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快,所以它叫数据的批处理。YARN是体现Hadoop平台概念的重要组件,有了它大数据生态体系的其它软件就能在hadoop上运行了,这样就能更好的利用HDFS大存储的优势和节省更多的资源,比如我们就不用再单独建一个spark的集群了,让它直接跑在现有的hadoop yarn上面就可以了。
学了这些,可以胜任初级Java工程师了,当然还是有很有可以提高的地方,比如学习下python,可以用它来编写网络爬虫。这样我们就可以自己造数据了,网络上的各种数据你高兴都可以下载到你的集群上去处理。