1

後で処理するために、大量のシミュレートされた時系列データを保存する方法を探しています。データ ポイントは、文字列からプリミティブ データ型のタプル (主に浮動小数点) へのマッピングによって記述できます。各データ ポイントには時系列があり、各時系列には 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 のフラット インデックスと時間インデックスをキーとして、データ ポイントを値として使用する、2 つのバリアントをテストしました。(b)の性能が少し気になりますが、(a)はそこそこうまくいきました。

また、単純にすべてを CSV に書き込むことも検討しました。これの利点は、事実上誰でも後でデータをインポートできることです。欠点は、任意の ID を持つ特定の時系列またはレコードを検索するには、レコードが見つかるまでファイルを 1 行ずつ読み取る必要があることです。

4

2 に答える 2