百万数据CSV文件对比及处理

百万数据CSV文件对比及处理,第1张

set() 没有顺镇脊序,遍历速度快,值具有唯一性

old.csv    600万条记录

compare.csv  600万条记录

文件:乱旅迅0.0005s

old_csv = open('old.csv')    #80bytes,#生成器

转化为可读数据结构(set()):哗此600万条数据,17.03s

old_set = set()

for line in db_reader:

        old.set.add(line[4])

转化为可读数据结构(list):600万条数据,15s

old_list = []

for line in db_reader:

        old.set.append(line[4])

遍历:

for _ in old_list:    #0.078s

    continue

for _ in old_set:    #0.56s

    continue

if 'a' in old_set:    #9.5 -07s

    pass

if 'a' in old_list:   #0.066s

    pass

CSV和excel的区别:

1.CSV是纯文本文件,excel不是纯文本,excel包含很多格式信息在里面。

2.CSV文件的体积会更小,创建分发读取更加方便,适合存放结构化信息,比如记录的导出,流量统计等等。

3.CSV文件在windows平台默认的打开方式是excel,但是它的本质是一个文本文件。

背景      

最近在应对一个携裂郑数辩颂据查询导出模块,总体要求就是依据给定的SQL语句,输出其查询结果为csv或者xlsx文件。其中查询数据量可能会有大数据量,成百上千万都可能。

探讨      

针对上述数据导出这个问题,提取出几个关键词:

1、SQL是由作业人员临时写的。

2、数据量大。

3、输出csv或xlsx文件。      

针对这几个关键词,咱分别扩展下其含义:      

第一个关键词:SQL是临时写的,这就意味着咱只是去执行这条语句,并不能对语句进行分页设计啥的,如果要重新分析SQL可能比较困难。这个时候比较贴近的场景就是“数据库查询客户端”,客户端只管执行SQL,至于执行得快慢等取决于语句及数据库性能等。      

第二个关键词:数据量大,即查询的返回结果可能比较多,你如何处理返回结果,是将其先存到List列表还是直接在结果集里面就给输出到文件。这就需要考虑内存、机器性能问题,不要一条语句执行了,直接导致你的java程序死掉了,比如JVM内存溢出,CPU使用率蹭蹭的涨到99%,导致整个程序无响应。      

第三个关键词:输出csv或xlsx文件源差,比如csv是利用成熟的三方库还是自己写(毕竟就是逗号分隔的文本),不同人可能有不同看法,但是我主张大家用现成的三方依赖包,比如javacsv\opencsv都是比较成熟的工具包。      

语法不同。局森

1、csv格式语法不同,每条记录占一行,以逗号为分隔符,逗号前后的空格会被忽略。

2、xml格式可扩展标记语雹手言(标准通用标记语言的子集)是一种简单的数据存储语桐肆亩言。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12333386.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存