博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PB中使用blob进行文件读取的性能问题
阅读量:4073 次
发布时间:2019-05-25

本文共 702 字,大约阅读时间需要 2 分钟。

在大规模进行数据导入时,最好能够使用PB中数据窗口自带的导入,那样的数据效率是比较高的,但是,对于非正规数据的导入就比较麻烦一点,因为数据窗口的导入是必须指定格式的,在这里,我也碰到了这样一个问题

由于在一个开发过程中,每天大约需要导入一千万条左右的数据,而且数据是保存在文本文件中,数据的格式基本上不固定,需要人为判断。

首先我采用FileReadEX这个程序将数据读入到Blob变量中,然后再用BlobMid进行数据剪裁,(这里说明一下,因为pb的String对于中文字符是使用一个长度进行判断的,有时操作不太方便,所以我使用了blob)。经过调试后发现,当文件越大,分析的速度就越慢,比如分析一万条可能需要五秒钟时间,但是如果分析两万条是可能就需要20秒,三万条是可能需要将近一分钟。这说明blobMid函数在对blob进行取数时与blob本身的长度关系很大,不是直接采用计算地址的方式做的。

现在进行一定的改进,

第一种方法:通过fileread进行读取,这样每次读取的长度不能超过32765字节,这样会有一个问题,有可能一条数据会在两次读取中,这样就需要进行一些判断。

第二种方法:仍然通过FileReadEX来进行读取,再生成一个Blob的变量用于每次取出定长的数据进行分析。

经过测试这样的效率能够提高相当多,而且性能稳定。

现在有一个疑问是:

我个人认为,如果每次通过FileRead来读取,就会频繁与外村进行关联,速度应该是比较慢的,而用FileReadEx进行读取,文件已经到内存中,应该会更快。但是事实却非如此,不知道是我程序开发的没有找到一个优化的缓存变量大小的原因还是其他原因。

转载地址:http://mwwni.baihongyu.com/

你可能感兴趣的文章
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
ssh 如何方便的切换到其他节点??
查看>>
JSP中文乱码总结
查看>>
Java-IO-File类
查看>>
Java-IO-java的IO流
查看>>
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java大数据:Hbase分布式存储入门
查看>>
大数据学习:Spark RDD操作入门
查看>>
大数据框架:Spark 生态实时流计算
查看>>
大数据入门:Hive和Hbase区别对比
查看>>