我正在寻找一种存储大量模拟时间序列数据的方法,以便以后处理。数据点可以通过从String到原始数据类型元组(主要是浮点)的映射来描述。每个数据点都有一个时间序列,每个时间序列都有一个id。我正在寻找一种有效的方法来从磁盘写入/读取此数据。模拟大致看起来像这样
Sample sample = new Sample();
for (int i=0; i<samplesize; i++) {
State s = initialState();
for (int t=0; t<stages; t++) {
Map<String,Double> data = s.getData();
sample.add(i,t,data);
s = s.nextState();
}
}
为了实现Sample类,我到目前为止测试了以下
我还考虑过简单地将所有内容写入CSV。这样做的好处是几乎任何人都可以在以后导入数据。缺点是搜索具有任意id的特定时间序列或记录将需要逐行读取文件,直到找到记录。
答案 0 :(得分:0)
因为你正在使用外部存储器,你可能想要阅读Henrik Jonsson's thesis中的B树章节 - B-trees本身是一种非常流行的方法来索引外部存储器中的数据,你应该能够在Java中找到实现,Jonnson讨论了如何使它们适应存储时间序列数据。
答案 1 :(得分:0)
一个随时可用的(开源)库是Hierarchical Data Format(HDF),可用于存储时间序列数据。该Java-compatible version软件也存在。
在内部,它使用B树来存储数据,并提供许多其他功能来提高性能(压缩,缓存等)。