我有以下的csv:
20120201 000000;1.306600;1.306600;1.306560;1.306560;0哪里
行字段: DateTime邮票;酒吧公开投标报价;酒吧高出价报价;酒吧低出价报价;酒吧近标报价;卷 DateTime邮票格式: YYYYMMDD 传说: YYYY年MM -月(01 ~ 12) DD日-月HH -小时(24小时格式) MM -分钟SS -秒,在这种情况下,它将永远00。
其欧元/美元市场数据(1分钟)。
的问题是:我需要在java程序的内存中存储尽可能多的数据,所以我不必像使用them.Preferably时那样不断地读取它们,存储它们,因为我不介意这需要多少内存。
我想我必须使用BigDecimal来保持圆滑(我必须对这些价格做一些计算),.I每个row.One文件有3 bigDecimals,包含40万行,这是很多要create.There的对象,可能是多个文件,相当于objects.In加法BigDecimal的百万美元带来了开销。
问题:在内存中存储这些数据的最佳方式/数据结构/收集是什么?缓存一次固定100 k?使用不同的东西然后BigDecimal (我需要保持精确)?或者尽我所能装上所有的东西?
我也不想花费大量的计算时间来创建大量的BigDecimal对象,如果有更好的方法的话。
我目前的想法只是像我can.Bud一样多加载,因为我害怕许多缺点/以及当我不得不将代码移植到C#(需求)时会出现问题。
发布于 2017-02-09 12:10:15
一个Big实例占用内存中的32个字节。一百万BigDecimals将是32000000字节。这是31250千字节,30.5兆字节,所以1000万是305兆字节。当接近1亿的时候,你需要3次演出。还是合理的。
所以你的命运真的很多吗?
至于处理代码,我建议您将其处理为块,并在继续下一个块之前处理这些块。
BufferedReader可以在此提供帮助,方法是按块加载文件,并按需要进行处理。
而创建许多对象将得到解释器的优化,因此它实际上可能运行得非常快。
只是一个例子,
例如,我有一段代码,生成>400 mb的json文件。稍后读取那些json文件将在30秒内发生,同时也会发生许多其他进程。
与csv文件相比,这些json文件在处理过程中数据/结构更加密集。所以我真的认为你不应该担心处理开销。
https://stackoverflow.com/questions/42136129
复制相似问题