【发布时间】:2018-12-02 06:42:26
【问题描述】:
我使用一个输出二维数据数组的模拟,其中每一列是一个不同的模拟变量(大约 50,000 个变量),每一行是每个时间样本(不同,但通常有 10,000 个或更多时间点)。
需要通过两种不同的方式访问这些数据:要么获取少量变量的整个时间序列,要么获取特定时间点的每个变量。换句话说,有时我需要从数据中读取列,有时我需要读取行。
目前,模拟以行优先顺序输出二进制格式。这使得获取特定时间的每个变量变得容易,但是读取单个变量的整个时间序列非常慢,因为数据分布在整个千兆字节大小的文件中。
是否有某种数据结构可以帮助我?我知道我可以有效地将文件大小加倍并以行优先和列优先顺序存储数据,但是文件已经很大了。
我已经查看了这里的其他一些问题,但似乎没有一个解决这个特定的用例。
【问题讨论】:
-
从您告诉我们的情况来看,我想您的典型数据文件约为 4GB。考虑到当前磁盘存储的成本,这真的太多了吗? Crikey,如今 16GB RAM 的笔记本电脑没什么特别的,你可以在内存中保存两次数据!我可以保证没有人会提供一种聪明的数据结构,当您以“正确”顺序读取文件以从磁盘顺序流式传输数据时,它会提供与当前相同的行和列访问速度。
-
不幸的是,我们每天都会运行很多很多模拟。管理层不会批准遥测数据突然翻倍。在我们的网络中,我们不仅需要两倍的硬盘,而且还需要两倍的磁带备份。
-
不是说它非常相关,但是为什么您需要两倍的磁带备份?
标签: data-structures language-agnostic