1

グラフ ビューで視覚化するために、大量の (そして動的に増加する) 量のデータを圧縮するためのいくつかのアプローチを探しています。

タイムスタンプと値のペアで構成されるバイナリ ファイルがあるとします。このファイルはリアルタイムで拡大し、簡単に数ギガバイトを超える可能性があります。

現在、このデータをグラフ/プロットとして表示する複数のビューがあります。ほとんどの場合、x 軸上のピクセルよりもはるかに多くのデータがあるため、このデータを目的の解像度に圧縮する必要があります。各ビューには、画面上のサイズに応じて異なる解像度が必要になる場合があります。また、ズームインおよびズームアウトすると、その解像度がすばやく変化します。

現在のアルゴリズムは、データを同じ長さのセクションに分割し、最小値と最大値を計算します。x 軸の各ピクセルに対して、最小値から最大値までの垂直線を描画します。このようにして、外れ値を見逃さないようにすることができます。(これは要件です)

新しい解像度が必要になるたびに、別のセクションの長さを選択してファイル全体を処理する必要がありますが、これは非常に遅くなります。

解決策は、さまざまな解像度のデータを (一定時間) 呼び出すことができる、ある種のキャッシュ レイヤーを作成することです。残念ながら、外れ値を表示する方法でそのようなキャッシュを実装する方法がわかりません。

この種の問題へのアプローチを示すヒントや文献を知っていますか?

環境は Microsoft .net ですが、これは一般的な考え方に関するものであるため、違いはありません。

前もって感謝します。

4

1 に答える 1

2

私のアプローチは、次のように、データを複数のファイルに保存することです。

  • {timestamp, value} を FILE[0] に追加します。
  • i = 0 の場合 ... MAX_REASONABLE:
    • FILE[i] のサンプル カウント モジュロ ZOOM がゼロ以外の場合、終了します。
    • FILE[i] から最後の ZOOM サンプルを取得します。
    • それらを単一のサンプル (例: 平均タイムスタンプ? Get minimum?) と平均サンプル データに圧縮します。
    • FILE[i+1] が存在しない場合は作成します。
    • 新しく作成したサンプルを FILE[i+1] に書き込みます

データの総量は SIZE * (1/(1-(1/ZOOM))) に収束します。ZOOM=2 の場合は 100% の余分なスペースが必要で、ZOOM=4 の場合は 33% しか必要ありません。

視覚化するときは、表示する最も近いレベルをすばやく選択します。ZOOM=2 で、600.000 サンプルを含む範囲から 800 ピクセルを視覚化する必要があるとします。次に、600.000/800 の対数を ZOOM の対数で割ると 9.55 になります。これは、ズーム レベル 9 にアクセスする必要があることを意味します。

そのファイルは ZOOM^9 = 512 倍ズームされます。つまり、600.000/512 = 1171 サンプルを読み取り、1171 x H 画像を 800 ピクセル幅にリサンプリングします。

総書き込みコストは、平均で最大 300% 増加します。総ストレージ要件は最大で 100% 増加します。画像を生成するためのコストは、生成する画面画像の幅に応じてほぼ一定になります。

私はマップ レンダリング用にそのようなシステムに取り組んできましたが、リアルタイムのパンとズームを使用してテラピクセル マップから長方形の領域を表示することができます (ネットワーク スループットと遅延を除きます。つまり、そこでは JPEG 品質でプレイしました)。

于 2012-07-12T10:39:36.310 に答える