gpt4 book ai didi

java - 存储大量模拟时间序列数据

转载 作者:行者123 更新时间:2023-12-01 04:35:45 25 4
gpt4 key购买 nike

我正在寻找一种方法来存储大量模拟时间序列数据以供以后处理。数据点可以通过从字符串到原始数据类型(主要是浮点)的元组的映射来描述。每个数据点都有一个时间序列,每个时间序列都有一个 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 类,我到目前为止已经测试了以下内容

  • 嵌套列表/键值映射:非常简单,但将所有数据保留在内存中,然后将所有内容序列化到磁盘,扩展性不佳。
  • MapDB:我测试了两种变体,(a) 使用时间序列 id 作为键,时间序列作为值,(b) 使用时间序列 id 和时间索引的平面索引作为键,数据点作为值。我有点担心 (b) 的表现,但 (a) 的效果相当不错。

我还考虑过将所有内容简单地写入 CSV。这样做的好处是几乎任何人都可以稍后导入数据。缺点是搜索特定时间序列或具有任意 id 的记录需要逐行读取文件,直到找到记录。

最佳答案

由于您使用的是外部存储器,因此您可能需要阅读 Henrik Jonsson's thesis 中有关 B 树的章节。 -B-trees它们是在外部存储器中索引数据的一种非常流行的方法,您应该能够在 Java 中找到实现,Jonnson 讨论了如何调整它们来存储时间序列数据。

关于java - 存储大量模拟时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17390967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com