4

株価ティック データの大きなデータ セット (圧縮されていない 200GB、 bz2 -9 で圧縮された 9GB) があります。

それらに対して基本的な時系列分析を実行したいと思います。

私のマシンには 16GB の RAM があります。

私は次のことを好みます:

  • すべてのデータを圧縮してメモリに保持する

  • そのデータをオンザフライで解凍し、ストリーミングします [ディスクにヒットすることはありません]

  • すべての分析をメモリ内で行う

ここで、Clojure の怠惰性と将来のオブジェクトとの優れた相互作用があると思います (つまり、オブジェクトにアクセスしようとするときにオブジェクト st を定義でき、その場で解凍します)。

質問: Clojure で高パフォーマンスの時系列分析を行う際に留意すべきことは何ですか?

私が特に興味を持っているのは、次のようなトリックです。

  • ティックデータをメモリに効率的に保存する

  • 計算を効率的に行う

  • データのパス数を減らすための奇妙な畳み込み

書籍/記事/研究論文の提案を歓迎します。(私はCSの博士課程の学生です)。

ありがとう。

4

2 に答える 2

3

いくつかのアイデア:

  • 圧縮データの保存に関しては、OS 独自のファイル システム キャッシュよりもはるかに優れているとは思いません。ファイルシステムのキャッシュに 11GB 以上の RAM を使用するように構成されていることを確認してください。圧縮されたデータセット全体が最初に読み取られるときにメモリに取り込まれます。
  • その後、Clojure コードを定義して、解凍を実行するZipInputStreamを介して遅延してデータを取り込むことができるはずです。
  • データに対して 2 回目のパスを実行する必要がある場合は、同じファイルに新しい ZipInputStream を作成するだけです。OS レベルのキャッシュにより、ディスクに再度ヒットしないようにする必要があります。
于 2012-09-10T23:18:45.317 に答える
1

そのようなシステムが Java で実装されていると聞いたことがあります。可能です。これを行うには、独自の遅延シーケンスを作成する方法を理解しておく必要があります。また、処理したいプリミティブ型を処理していることを確認する必要がある場合は、Java にドロップダウンすることも躊躇しません。たとえば、Clojure は 32 ビット int で計算を行うコードを生成せず、long を処理するコードのみを生成します。

また、インメモリ フォーマットをディスク フォーマットと互換性を持つようにすることも、多少の努力の価値があります。これにより、メモリ マッピング ファイルのオプションが得られるか、または (少なくとも) プログラムがクラッシュした場合の起動が容易になります。たとえば、ディスク上のファイルを読み取るだけで、以前の状態を回復できます。

于 2012-09-11T02:22:32.503 に答える