Java有效存储市场数据价格值(BigDecimal)

标签 java csv caching currency bigdecimal

我有以下 csv:

20120201 000000;1.306600;1.306600;1.306560;1.306560;0

哪里

Row Fields: DateTime Stamp;Bar OPEN Bid Quote;Bar HIGH Bid Quote;Bar LOW Bid Quote;Bar CLOSE Bid Quote;Volume

DateTime Stamp Format: YYYYMMDD HHMMSS

Legend: YYYY – Year MM – Month (01 to 12) DD – Day of the Month HH – Hour of the day (in 24h format) MM – Minute SS – Second, in this case it will be allways 00

其欧元/美元市场数据(BAR 1 MIN)。

问题是:我需要在java程序的内存中存储尽可能多的数据,这样我在使用它们时就不必不断地读取它们。最好将它们全部存储起来,因为我不介意这将占用多少内存。

我想我必须使用 BigDecimal 来保持精度(我必须对这些价格进行一些算术)。我每行有 3 个 bigDecimal。一个文件包含 400 000 行,这是我必须创建的很多对象。可能有多个文件,相当于数百万个对象。此外,BigDecimal 会带来开销。

问题:在内存中存储这些数据的最佳方式/数据结构/集合是什么?一次缓存固定数量 100k?使用与 BigDecimal 不同的东西(我需要保持精度)?或者只是加载所有内容/尽可能多?

如果有更好的方法,我也不想花费大量计算时间创建大量 BigDecimal 对象。

我目前的想法是尽可能多地加载。但是,当我必须将此代码移植到 C#(要求)时,我担心会出现许多缺点/以及问题。

最佳答案

一个 Big Decimal 实例占用 32 个字节的内存。 一百万个 BigDecimal 相当于 32000000 字节。 即 31250 KB, 30.5 MB 所以 1000 万将是 305 兆字节。 当接近 1 亿时,您将需要 3 场演出。还是合理的。

那么你的LOT真的很多吗?

至于处理代码,我建议您将其处理为 block ,并在继续处理下一个 block 之前处理这些 block 。

BufferedReader 确实可以提供帮助,通过分块加载文件并进行处理。

创建许多对象将由解释器优化,因此实际上可能会非常快。

只是一个例子

举个例子,我有一段代码,它生成 >400 mb 的 json 文件。稍后读取这些 json 文件会在 30 秒内发生,同时还会发生许多其他进程。

这些 json 文件在处理过程中比 csv 文件需要更多的数据/结构。所以我真的认为你不应该担心处理开销。

关于Java有效存储市场数据价格值(BigDecimal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136129/

相关文章:

java - 我在通过 Web Start/Applet 部署 Swing 应用程序时遇到困难

python - 字典到 CSV 文件 : Ordering of columns

node.js - 在 express 中缓存响应

java - Hibernate引入二级缓存如何解决N+1问题?

java - 如何将我的 json 字符串进行 avro 二进制编码为字节数组?

java - ubuntu 上的 JNI 不满意链接错误

java - 从 csv 读取值并将占位符替换到模板中

java - Oracle Coherence 驱逐不起作用

java - 为什么我的变量在不同方法之间不保持顺序?

python-3.x - Pandas 将重复项删除到 CSV