`
wbj0110
  • 浏览: 1549262 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

在集群上支持数据库大数据量导出

阅读更多

80w行的数据导出

数据库表(经过程序处理)导出一般使用EXCEL文件,技术一般有POIJXLFastExcel。但是当文件过大(几十个字段,行数超过200,000)的时候,往往会出现内存溢出OutOfMemery,这个是应用无非承受的。

对于导出这么大量的数据,一般没有实时性的要求,也没有外观的要求。

业务部分的需求一般是:导出80W行数据,不管是什么,最后能变化成EXCEL即可。

解决方案:直接导出成TXT的格式,再由EXCEL打开,这样一般能满足业务的需求。

涉及的技术,压缩、并发等技术还要跟集群结合。

压缩:直接将txt压缩成RAR文件,没有什么难度。

并发:我们在后台起一个线程或者几个线程来运行一段程序,操作数据的任务表。(可以是单台机器操作)。

任务处理:直接在数据库建立任务表。

 

基本的结构如下所示:

交互图

  1. 用户的一个下载请求,传到这个服务器,服务器再传到第一台服务器。
  2. 第一台服务器向DB的任务表中插入一个条任务信息。
  3. 当第一台服务器启动的时候,启动一个线程,定时去查看DB中有没有任务。
  4. 如果有任务,则 处理,从底层BO中取得需要的数据。
  5. 直接写入文件file.txt中,再将压缩成file.rar文件
  6. 在页面展示一个下载中心,用户可以下载文件、也可以删除文件,甚至可以查看当然的下载任务的处理剩余时间。

 

file.rar必须挂在存储上,多台服务器共享。

 

 压缩源码(核心部分):

public static final String FILE_STYLE = ".rar";<br />

public static final String CODE = "ISO8859_1";<br />

public static BigDecimal compressedFiles(File file) throws IOException {<br />

File f = new File(file.getPath() + FILE_STYLE);<br />

compress(file, f);<br />

file.delete();<br />

return new BigDecimal(f.length() / (1024 * 1024 * 1.0));<br />

}<br />

public static void compress(File file, File ff) throws IOException {<br />

FileOutputStream f = new FileOutputStream(ff);<br />

CheckedOutputStream csum = new CheckedOutputStream(f, new CRC32());<br />

ZipOutputStream out = new ZipOutputStream(<br />

new BufferedOutputStream(csum));<br />

out.setComment("压缩的文件,文件是txt的");<br />

BufferedReader in = new BufferedReader(new InputStreamReader(<br />

new FileInputStream(file), CODE));<br />

out.putNextEntry(new ZipEntry(file.getName()));<br />

int c;<br />

while ((c = in.read()) != -1)<br />

out.write(c);<br />

out.flush();<br />

out.close();<br />

in.close();<br />

f.close();<br />

csum.close();<br />

}

NotepadRender:

 

public static final String FILE_STYLE = ".rar";<br />

public static final String CODE = "ISO8859_1";<br />

public static BigDecimal compressedFiles(File file) throws IOException {<br />

File f = new File(file.getPath() + FILE_STYLE);<br />

compress(file, f);<br />

file.delete();<br />

return new BigDecimal(f.length() / (1024 * 1024 * 1.0));<br />

}<br />

public static void compress(File file, File ff) throws IOException {<br />

FileOutputStream f = new FileOutputStream(ff);<br />

CheckedOutputStream csum = new CheckedOutputStream(f, new CRC32());<br />

ZipOutputStream out = new ZipOutputStream(<br />

new BufferedOutputStream(csum));<br />

out.setComment("压缩的文件,文件是txt的");<br />

BufferedReader in = new BufferedReader(new InputStreamReader(<br />

new FileInputStream(file), CODE));<br />

out.putNextEntry(new ZipEntry(file.getName()));<br />

int c;<br />

while ((c = in.read()) != -1)<br />

out.write(c);<br />

out.flush();<br />

out.close();<br />

in.close();<br />

f.close();<br />

csum.close();<br />

 

}

 

 

分享到:
评论

相关推荐

    2021数据仓库服务常见问题汇总-华为-51页.pdf

    2.6 在集群扩容过程中数据仓库集群仍可供使用吗? 2.7 购买集群节点后,能否将节点切换到另一个区域使用? 2.8 扩容后,为什么已使用存储容量比扩容前减少了很多? 2.9 如何查询GaussDB(DWS) 集群全部节点的实例详细...

    oracle数据库dba管理手册

    7.3.6 回滚段中的数据量 178 7.4 使用Oracle Enterprise Manager 管理回滚段 178 7.4.1 从OEM创建回滚段 179 7.4.2 创建与现有回滚段一样的回滚段 180 7.4.3 设置回滚段为联机状态 181 7.4.4 设置回滚段为脱机状态 ...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    12.7.2导入导出工具数据泵 12.7.3跨平台数据迁移 12.7.4可传输表空间 12.7.5使用RMAN工具复制数据库 12.8本章小结 第13章 RAC恢复 13.1恢复技术基础 13.1.1恢复解决方案 13.1.2 SCN时间机制 13.1.3日志线程...

    大数据平台架构.pdf

    ⼤数据平台架构 前⾯提到各种⼤数据技术的原理与架构,⼤数据计算通过将可执⾏的代码分发到⼤规模的服务器集群上进⾏分布式计算,以处理⼤规模的数 据,即所谓的移动计算⽐移动数据更划算。但是这样的计算⽅式必然...

    omni:用于运行Kubernetes的Raspberry Pi集群的非常轻量级的监视系统

    一个非常轻量级的监视系统,用于运行Kubernetes的Raspberry Pi集群。 为什么? 当我使用一些Raspberry Pi完成Kubernetes集群时,我要做的第一件事是安装Prometheus + Grafana进行监视,所以我做到了。 但是当我所有...

    数据管理平台 Apache Geode.zip

    概览Apache Geode 是一个数据管理平台,提供实时的、一致的、贯穿整个云架构地访问数据关键型应用.Geode 池化了服务器上的内存, CPU, 网络资源, 和本地磁盘,跨多个进程来管理应用对象和应用行为. 它使用了动态数据...

    java开源包5

    DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一个完整的虚拟机以及一个 javap 字节码反汇编器。 brap(Java远程调用框架 BRAP) 一个Java远程调用框架,它将原生Java对象序列...

    大数据技术概述.pdf

    多样化,结构化数据,保存在关系数据库中,具有规范的⾏和列的结构数据,只占⼈类数据 量10%不到。90%是⾮结构化数据,存储在⾮关系数据库中。快速化,数据有价值必须快速处理,⼀秒定律,数据从⽣成到决策响应仅需 ...

    高频大数据解决方案.pptx

    关键技术特性 ACID全事务支持 灵活的扩展性 错误恢复 可持久化到硬盘 内嵌OLAP 导出连接器 基于网络的异步集群复制 6 高频大数据解决方案全文共28页,当前为第6页。 关键特性: 线性扩展 7 增加一个新结点到VoltDB...

    在python中使用pyspark读写Hive数据操作

    主要介绍了在python中使用pyspark读写Hive数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    jeesite后台框架

    强大的Excel导出导入工具封装,支持大数据量,注解定义,简单配置即可实现。 Job作业调度,界面化在线管理,可新增,编辑、删除、暂停、恢复、运行一次等操作 在线查询在线人员,强踢在线账号。 代码生成工具操作简化...

    Hadoop实战中文版

    9.4 在EC2 上运行MapReduce 程序 9.4.1 将代码转移到Hadoop集群上 9.4.2 访问Hadoop集群上的数据 9.5 清空和关闭EC2 实例 9.6 Amazon Elastic MapReduce 和其他AWS 服务 9.6.1 Amazon Elastic MapReduce 9.6.2...

    FusionInsightHD华为大数据平台.pdf

    同时也可以将数据从关系型数据库或者⽂件 服务器导⼊到FusionInsight HD的HDFS/HBase中,或者反过来从HDFS/HBase导出到关系型数据库或者⽂件服务器中。同时提供 REST API接⼝,供第三⽅调度平台调⽤。 Loader模型...

    Hadoop实战(陆嘉恒)译

    map侧过滤后在reduce侧联结5.3 创建一个Bloom filter5.3.1 Bloom filter做了什么5.3.2 实现一个Bloom filter5.3.3 Hadoop 0.20 以上版本的Bloom filter5.4 温故知新5.5 小结5.6 更多资源第6 章 编程实践6.1 开发...

    Hadoop实战中文版.PDF

    1186.2 生产集群上的监视和调试 1236.2.1 计数器 1236.2.2 跳过坏记录 1256.2.3 用IsolationRunner重新运行出错的任务 1286.3 性能调优 1296.3.1 通过combiner来减少网络流量 1296.3.2 减少输入数据量...

    JAVA上百实例源码以及开源项目

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    JAVA上百实例源码以及开源项目源代码

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    Fourinone分布式并行计算四合一框架

     Fourinone对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,它使用不同于map/reduce的全新设计模式解决问题。Fourinone有“包工头”,“农民工”,“手工仓库”的...

Global site tag (gtag.js) - Google Analytics