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

标签 java database dictionary simulation time-series

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

相关文章:

java - Spring Cloud Feign UnsatisfiedDependencyException 异常

sql - Oracle 查询显示错误 "not a GROUP BY expression"

mysql - 监视数据库更改的免费工具?

ios - 如何使用readDataForTable方法?

java - 将多个映射序列到一个文件

java - GWT:带有按钮单击的往返示例

java - 在java中聚焦时如何获取实际的文本字段

java - 使用给定公钥的 RSA 加密(Java 中)

.net - 将字典从一种类型转换为另一种类型

swift - 如何使用字典中的所有数据填充 tableView?