有效存储市场数据价格值的Java(BigDecimal)
我有以下建议:有效存储市场数据价格值的Java(BigDecimal),java,csv,caching,currency,bigdecimal,Java,Csv,Caching,Currency,Bigdecimal,我有以下建议: 20120201 000000;1.306600;1.306600;1.306560;1.306560;0 在哪里 行字段:日期时间戳;禁止公开投标报价;高标杆报价;酒吧 低报价;禁止闭标报价;卷 日期时间戳格式:YYYYMMDD HHMMSS 图例:YYYY–年MM–月(01至12)日–月日HH– 在这种情况下,一天中的小时数(24小时格式)MM–分钟SS–秒 一直都是00点 其欧元/美元市场数据(1分钟) 问题是:我需要将尽可能多的数据存储在java程序的内存中,这样我就不
20120201 000000;1.306600;1.306600;1.306560;1.306560;0
在哪里
行字段:日期时间戳;禁止公开投标报价;高标杆报价;酒吧
低报价;禁止闭标报价;卷
日期时间戳格式:YYYYMMDD HHMMSS
图例:YYYY–年MM–月(01至12)日–月日HH–
在这种情况下,一天中的小时数(24小时格式)MM–分钟SS–秒
一直都是00点
其欧元/美元市场数据(1分钟)
问题是:我需要将尽可能多的数据存储在java程序的内存中,这样我就不必在处理这些数据时不断地读取它们。最好将它们全部存储起来,因为我不在乎这会占用多少内存
我想我必须使用BigDecimal来保持洞察力(我必须对这些价格做一些算术)。我每行有3个BigDecimal。一个文件包含40万行,这是我必须创建的很多对象。可能有多个文件,相当于数百万个对象。此外,BigDecimal带来了开销
问题:在内存中存储此数据的最佳方式/数据结构/收集方式是什么?一次缓存固定数量100k?使用不同于BigDecimal的东西(我需要保持精度)?还是尽我所能把所有东西都装进去
如果有更好的方法,我也不想花费大量的计算时间来创建大量的BigDecimal对象。
我目前的想法是尽可能多地加载。当我必须将此代码移植到C#(要求)时,我担心会有很多缺点/以及问题。一个大的十进制实例占用32个字节的内存。 一百万个大小数将是32000000字节。 也就是31250千字节,30.5兆字节 所以1000万将是305兆字节。 当接近1亿美元时,你需要3次演出。还是合理的 那么你的命运真的很重要吗 至于处理代码,我建议您将代码处理成块,并在继续下一块之前处理这些块 BufferedReader在这方面真的很有帮助,它将文件分块加载,边处理边处理 而且创建许多对象会被解释器优化,所以它实际上可能运行得非常快 只是一个例子 举个例子,我有一段代码,可以生成大于400 mb的json文件。稍后读取这些json文件只需30秒,同时会发生许多其他过程
这些json文件在处理过程中比csv文件更加数据/结构密集。所以我真的认为您不应该担心处理开销。是什么让您认为“数百万对象”将成为一个问题?你的机器有多少内存?我会尝试先编写最简单的代码,然后测试性能,而不是假设它会有问题。@Jon Skeet我的机器有16GB,tbh我担心创建这些对象以及之后处理这么大的收集/数据结构会带来更多的开销。我认为您可能会正确地测试多种方法。我只是想知道在这方面是否有最佳实践或最优化/有效的方法。哦,这一点也不多。我可能会封装然后在另一个对象中的行进行更好的管理。我不知道用这个来解码JSON文件有多复杂。