【发布时间】:2017-02-09 11:57:54
【问题描述】:
我有以下 csv:
20120201 000000;1.306600;1.306600;1.306560;1.306560;0
在哪里
行字段:日期时间戳;条形开盘报价;条形高价报价;条形 LOW 报价;Bar CLOSE 报价;成交量
日期时间戳格式:YYYYMMDD HHMMSS
图例:YYYY – 年 MM – 月(01 到 12) DD – 月份中的日期 HH – 一天中的小时(24 小时格式) MM – 分钟 SS – 秒,在这种情况下 永远都是00
其欧元/美元市场数据(BAR 1 MIN)。
问题是:我需要在 java 程序的内存中存储尽可能多的数据,这样我就不必在使用它们时经常阅读它们。最好将它们全部存储,因为我不介意这将占用多少内存。
我想我必须使用 BigDecimal 来保持精确度(我必须对这些价格进行一些算术运算)。我每行有 3 个 bigDecimals。一个文件包含 400 000 行,这就是我必须创建的很多对象。可能有多个文件,witch 相当于数百万个对象。另外 BigDecimal 会带来开销。
问题:将这些数据存储在内存中的最佳方式/数据结构/集合是什么?一次缓存固定数字 100k?使用与 BigDecimal 不同的东西(我需要保持精度)?还是尽可能多地加载所有内容?
如果有更好的方法,我也不想花费大量计算时间来创建大量 BigDecimal 对象。
我目前的想法是尽可能多地加载。当我必须将此代码移植到 C#(要求)时,我害怕许多缺点/以及问题。
【问题讨论】:
-
是什么让您认为“数百万个对象”会成为问题?你的机器有多少内存?我会尝试先编写最简单的代码,然后测试性能,而不是假设它会出现问题。
-
@Jon Skeet 我的机器有 16GB,我担心创建这些对象和之后使用这么大的集合/数据结构会产生更多开销。我认为您可能以多种方式进行测试是正确的。只是想知道是否有最佳实践或最优化/最有效的方法。
标签: java csv caching currency bigdecimal