80w行的数据导出
数据库表(经过程序处理)导出一般使用EXCEL文件,技术一般有POI、JXL、FastExcel。但是当文件过大(几十个字段,行数超过200,000)的时候,往往会出现内存溢出OutOfMemery,这个是应用无非承受的。
对于导出这么大量的数据,一般没有实时性的要求,也没有外观的要求。
业务部分的需求一般是:导出80W行数据,不管是什么,最后能变化成EXCEL即可。
解决方案:直接导出成TXT的格式,再由EXCEL打开,这样一般能满足业务的需求。
涉及的技术,压缩、并发等技术还要跟集群结合。
压缩:直接将txt压缩成RAR文件,没有什么难度。
并发:我们在后台起一个线程或者几个线程来运行一段程序,操作数据的任务表。(可以是单台机器操作)。
任务处理:直接在数据库建立任务表。
基本的结构如下所示:
- 用户的一个下载请求,传到这个服务器,服务器再传到第一台服务器。
- 第一台服务器向DB的任务表中插入一个条任务信息。
- 当第一台服务器启动的时候,启动一个线程,定时去查看DB中有没有任务。
- 如果有任务,则 处理,从底层BO中取得需要的数据。
- 直接写入文件file.txt中,再将压缩成file.rar文件
- 在页面展示一个下载中心,用户可以下载文件、也可以删除文件,甚至可以查看当然的下载任务的处理剩余时间。
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 />
}
相关推荐
SQLite是一个轻量级的嵌入式数据库,没有独立的服务进程,但可以通过SQLite管理工具(如SQLiteStudio)或命令行工具`sqlite3`导出数据为SQL文件。 在上述描述中提到的压缩包文件名,它们可能关联于数据库操作的第三...
在Greenplum数据库环境中,数据同步是常见的需求,尤其在多个集群或数据库之间。这可能出于备份、恢复、测试环境复制等目的。本文将详细介绍如何在Greenplum的不同集群之间同步数据,以及如何监控性能以确保过程的...
这种方法速度快,适合大数据量迁移,但可能存在数据丢失的风险,因为 RDB 是定期快照,而非实时备份。 在实际操作中,选择哪种方法取决于具体需求,如数据量、时间窗口、是否容忍数据丢失等因素。对于小规模数据和...
- 控制数据库数据的磁盘分配。 - 可以限制用户在特定表空间中使用的磁盘大小。 - 表空间可以设置为离线(offline)、在线(online)、只读(readonly)或读写(readwrite)等状态。 - **数据文件(Datafile)**: ...
在进行任何大规模导出之前,最好先在非生产环境中进行测试。 总结来说,通过提供的压缩包文件,用户可以自动化地从DB2和Oracle数据库中提取重要的元数据,这对于数据库维护、迁移和灾难恢复都是非常有价值的。熟悉...
这种数据导入方法和系统对需要将现有Oracle数据库数据迁移到MongoDB的组织尤其有用,比如在大数据分析、互联网应用、物联网(IoT)项目等场景下,需要灵活的数据库架构和高性能的数据处理能力时。同时,对于那些希望...
64位系统能够处理更大的内存,因此适合处理大数据量和高并发的数据库工作负载。 4. **主要特性**: - **高性能**:Gbase数据库设计用于处理大量数据,通过列式存储和分布式计算提供高速数据读写。 - **高可用性**...
在大数据处理领域,HBase和Hive是两个重要的组件,它们各自扮演着不同的角色。HBase是一个基于Apache Hadoop的数据存储系统,适用于处理大规模、分布式、实时的数据存储和查询。而Hive则是一个数据仓库工具,它允许...
在处理大数据量时,两者都能通过索引优化、查询优化器等手段提升查询速度。 DBExportDoc V1.0 For Oracle.doc 和 DBExportDoc V1.0 For MySQL.doc 这两个文档很可能包含了关于如何导出或备份MySQL和Oracle数据库表...
10. **扩展性与分布式**:随着数据量的增长,可能需要将数据库扩展为分布式系统,如分片、读写分离、数据库集群等,以满足更高的读写需求和并发处理能力。 在实际项目中,结合CVI的特定需求,选择合适的数据库系统...
- 如果需要导出的数据量巨大,可以考虑分片(Sharding)或者并行处理(Parallel Processing)。 9. **异常处理** 不要忘记处理可能出现的异常,如网络错误、权限问题等,确保程序的健壮性。 10. **安全注意事项*...
- 每个文件数据量(fileSize):单位为条,如果不设置则不分割文件 - 自定义字段名(customFieldName):允许替换数据库中的字段名 - 字段分割字符(fieldSplit):当dataLayout为txt时,字段间的分隔符 - 字段...
14. Spark数据分析:手册还介绍了如何利用Jaguar平台进行SparkR分析,展示了Jaguar数据库在大数据分析方面的应用。 以上知识点为Jaguar数据库使用手册中提及的核心内容。用户通过本手册可以全面了解Jaguar数据库的...
分布式数据库设计方案旨在应对大型企业面临的数据库性能挑战,尤其是在数据量庞大的情况下。...通过结合各种策略和技术,如分区、复制、集群和中间件,企业可以构建出适应高并发、大数据量场景的高效数据库系统。
- **Value(价值密度低)**:虽然数据量大,但有用的信息含量较低,需要有效的分析手段提取价值。 #### 二、Hadoop及其生态系统 Hadoop是一个开源框架,用于处理和存储大规模数据。它的设计理念是通过利用廉价的...
此外,HBase作为NoSQL数据库,适合实时查询和大数据量的低延迟操作。 三、数据预处理与转换 在数据导入到数据仓库之前,通常需要进行数据清洗、转换和标准化。这一过程可以通过MapReduce完成,它是一种分布式计算...
5. **扩展性**:随着数据量的增长,CSE 支持水平扩展,可以通过增加服务器节点实现数据库集群,提升处理能力。 三、应用场景 CSE 数据库软件广泛应用于各行各业,包括但不限于: 1. **金融行业**:用于处理交易...
5. **性能优化**:在处理大量数据时,可以考虑使用`--batchSize`参数控制每次处理的数据量,以减少内存消耗。 总结,MongoDB的数据导出和导入工具是管理MongoDB数据库不可或缺的部分,通过`mongoexport`和`mongo...
随着数据量的增长,只需增加硬件即可提升处理能力,无需重构现有系统。 **6. 数据加载和卸载** Greenplum提供多种高效的数据导入导出工具,如gpfdist、gpload,可以快速地将大量数据导入或导出,满足大数据环境下的...