`
wbj0110
  • 浏览: 1604019 次
  • 性别: 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 />

 

}

 

 

分享到:
评论

相关推荐

    mysql sqlserver等数据库文档导出

    SQLite是一个轻量级的嵌入式数据库,没有独立的服务进程,但可以通过SQLite管理工具(如SQLiteStudio)或命令行工具`sqlite3`导出数据为SQL文件。 在上述描述中提到的压缩包文件名,它们可能关联于数据库操作的第三...

    Greenplum不同集群之间同步数据方法及性能1

    在Greenplum数据库环境中,数据同步是常见的需求,尤其在多个集群或数据库之间。这可能出于备份、恢复、测试环境复制等目的。本文将详细介绍如何在Greenplum的不同集群之间同步数据,以及如何监控性能以确保过程的...

    Redis数据导入导出以及数据迁移的4种方法详解

    这种方法速度快,适合大数据量迁移,但可能存在数据丢失的风险,因为 RDB 是定期快照,而非实时备份。 在实际操作中,选择哪种方法取决于具体需求,如数据量、时间窗口、是否容忍数据丢失等因素。对于小规模数据和...

    Oracle数据导出导入简介

    - 控制数据库数据的磁盘分配。 - 可以限制用户在特定表空间中使用的磁盘大小。 - 表空间可以设置为离线(offline)、在线(online)、只读(readonly)或读写(readwrite)等状态。 - **数据文件(Datafile)**: ...

    DB2和ORACLE数据库导出表结构空间和存储过程脚本。

    在进行任何大规模导出之前,最好先在非生产环境中进行测试。 总结来说,通过提供的压缩包文件,用户可以自动化地从DB2和Oracle数据库中提取重要的元数据,这对于数据库维护、迁移和灾难恢复都是非常有价值的。熟悉...

    一种将oracle数据库内的数据导入到mongodb数据库的方法及系统.docx

    这种数据导入方法和系统对需要将现有Oracle数据库数据迁移到MongoDB的组织尤其有用,比如在大数据分析、互联网应用、物联网(IoT)项目等场景下,需要灵活的数据库架构和高性能的数据处理能力时。同时,对于那些希望...

    Gbase数据库管理工具及数据库驱动

    64位系统能够处理更大的内存,因此适合处理大数据量和高并发的数据库工作负载。 4. **主要特性**: - **高性能**:Gbase数据库设计用于处理大量数据,通过列式存储和分布式计算提供高速数据读写。 - **高可用性**...

    hbase导出csv,文本,html文件

    在大数据处理领域,HBase和Hive是两个重要的组件,它们各自扮演着不同的角色。HBase是一个基于Apache Hadoop的数据存储系统,适用于处理大规模、分布式、实时的数据存储和查询。而Hive则是一个数据仓库工具,它允许...

    支持MYSQL和ORACLE数据库表

    在处理大数据量时,两者都能通过索引优化、查询优化器等手段提升查询速度。 DBExportDoc V1.0 For Oracle.doc 和 DBExportDoc V1.0 For MySQL.doc 这两个文档很可能包含了关于如何导出或备份MySQL和Oracle数据库表...

    cvi中数据库的应用

    10. **扩展性与分布式**:随着数据量的增长,可能需要将数据库扩展为分布式系统,如分片、读写分离、数据库集群等,以满足更高的读写需求和并发处理能力。 在实际项目中,结合CVI的特定需求,选择合适的数据库系统...

    java导出cassandra数据

    - 如果需要导出的数据量巨大,可以考虑分片(Sharding)或者并行处理(Parallel Processing)。 9. **异常处理** 不要忘记处理可能出现的异常,如网络错误、权限问题等,确保程序的健壮性。 10. **安全注意事项*...

    ES数据导出工具-升级指导1

    - 每个文件数据量(fileSize):单位为条,如果不设置则不分割文件 - 自定义字段名(customFieldName):允许替换数据库中的字段名 - 字段分割字符(fieldSplit):当dataLayout为txt时,字段间的分隔符 - 字段...

    jaguar数据库使用手册

    14. Spark数据分析:手册还介绍了如何利用Jaguar平台进行SparkR分析,展示了Jaguar数据库在大数据分析方面的应用。 以上知识点为Jaguar数据库使用手册中提及的核心内容。用户通过本手册可以全面了解Jaguar数据库的...

    分布式数据库设计方案.doc

    分布式数据库设计方案旨在应对大型企业面临的数据库性能挑战,尤其是在数据量庞大的情况下。...通过结合各种策略和技术,如分区、复制、集群和中间件,企业可以构建出适应高并发、大数据量场景的高效数据库系统。

    Hadoop概述&集群搭建.md

    - **Value(价值密度低)**:虽然数据量大,但有用的信息含量较低,需要有效的分析手段提取价值。 #### 二、Hadoop及其生态系统 Hadoop是一个开源框架,用于处理和存储大规模数据。它的设计理念是通过利用廉价的...

    基于hadoop生态搭建的电商数据仓库,整体功能架构包含数据采集、数仓搭建、数据导出、数据可视化等.zip

    此外,HBase作为NoSQL数据库,适合实时查询和大数据量的低延迟操作。 三、数据预处理与转换 在数据导入到数据仓库之前,通常需要进行数据清洗、转换和标准化。这一过程可以通过MapReduce完成,它是一种分布式计算...

    CSE 数据库软件

    5. **扩展性**:随着数据量的增长,CSE 支持水平扩展,可以通过增加服务器节点实现数据库集群,提升处理能力。 三、应用场景 CSE 数据库软件广泛应用于各行各业,包括但不限于: 1. **金融行业**:用于处理交易...

    Mongo 数据导出、导入工具

    5. **性能优化**:在处理大量数据时,可以考虑使用`--batchSize`参数控制每次处理的数据量,以减少内存消耗。 总结,MongoDB的数据导出和导入工具是管理MongoDB数据库不可或缺的部分,通过`mongoexport`和`mongo...

    greenplum数据库 v5.8.1

    随着数据量的增长,只需增加硬件即可提升处理能力,无需重构现有系统。 **6. 数据加载和卸载** Greenplum提供多种高效的数据导入导出工具,如gpfdist、gpload,可以快速地将大量数据导入或导出,满足大数据环境下的...

Global site tag (gtag.js) - Google Analytics