3

私は現在、より効率的にするためにいくつかのPythonコードを書き直しています。後で再利用/操作できるように、Python配列を保存することについて質問があります。

CSVファイルに保存された大量のデータがあります。各ファイルには、関心のあるデータのタイムスタンプ付きの値が含まれており、数千万のデータポイントを処理する必要があります。データが非常に大きくなったため、処理時間が過剰で非効率的です---現在のコードの記述方法では、新しいデータが追加されるたびにデータセット全体を再処理する必要があります。

私がしたいのはこれです:

  1. 既存のすべてのデータをPython配列に読み込みます
  2. 変数配列をある種のデータベース/ファイルに保存します
  3. 次に、さらにデータが追加されたときに、データベースをロードし、新しいデータを追加して、再保存します。このように、一度に処理する必要があるデータはごくわずかです。
  4. 保存したデータは、他のPythonスクリプトからアクセスできるようにするだけでなく、OriginProやExcelなどのプログラムで処理できるように、かなり「人間が読める」形式にする必要があります。

私の質問は、データを保存するのに最適な形式は何ですか?HDF5は、私が必要とするすべての機能を備えているようですが、SQLiteのようなものの方が理にかなっていますか?

編集:私のデータは一次元です。私は基本的に(数百万、1)サイズの30個のアレイを持っています。ポイントが多すぎるという事実がなければ、CSVは理想的なフォーマットになります!単一のエントリのルックアップを実行する可能性は低いです---データの小さなサブセット(たとえば、過去100時間、または過去1000時間など)をプロットしたい場合があります。

4

3 に答える 3

2

たぶん、Redis、Berkeley DB、MongoDBのようなある種のKey-Valueデータベースを使用することができます...しかし、使用するスキーマについての情報がもっとあればいいのですが。

編集済み

たとえば、 Redisを選択した場合、非常に長いリストにインデックスを付けることができます。

リストの最大長は232-1要素です(4294967295、リストあたり40億を超える要素)。時間計算量の観点から見たRedisリストの主な機能は、何百万ものアイテムが挿入されている場合でも、頭と尾の近くの要素の一定時間の挿入と削除のサポートです。要素へのアクセスは、リストの両端付近では非常に高速ですが、O(N)操作であるため、非常に大きなリストの中央にアクセスしようとすると低速になります。

于 2012-05-29T13:38:36.767 に答える
2

HDF5は素晴らしい選択です!それは素晴らしいインターフェースを持ち、広く使用されており(少なくとも科学界では)、多くのプログラムがそれをサポートしています(たとえば、matlab)、C、C ++、fortran、pythonなどのライブラリがあります...完全なツールセットがありますHDF5ファイルの内容を表示します。後でデータに対して複雑なMPI計算を実行する場合、HDF5は同時読み取り/書き込みをサポートしています。非常に大きなデータセットを処理するのに非常に適しています。

于 2012-05-30T13:12:42.590 に答える
0

このユースケースでは、レコード長が固定された単一のファイルを使用します。特殊なDBソリューション(その場合はやり過ぎのようです)はなくstruct、ファイルの古いもの(struct.pyのドキュメントを参照)とread()/ write()だけです。エントリが数百万しかない場合は、数十または数百MBのサイズの単一ファイルですべてがうまく機能するはずです(これはどのファイルシステムにとっても大きすぎることはほとんどありません)。後で必要になった場合に備えて、サブセットにランダムアクセスすることもできます。

于 2012-05-29T15:27:44.617 に答える