2012-02-10 10 views
1

解決するには以下の問題があります。膨大なデータセットを表示するには、グラフビューアを構築する必要があります。*リアルタイムでディスク上のファイルからデータにアクセスする*

実験の結果を表す何百万ものレコードを持つ特定の形式のファイルがあります。各レコードは、大きなグラフプロット上のサンプルポイントを表します。私が見た最大のファイルは4370万レコードです。

平均ファイルには1000万レコードが含まれています。各レコードは小さい(76バイト+オプションでそれぞれ12バイト)。完全なデータは、大きすぎるためメインメモリにロードすることはできません。私はレコードごとに48バイトにデータを圧縮し、お互いに関連付けられているチャンクにデータを編成する新しいファイル形式を構築しました。私は、2D/3Dプロットでレコードを表示することによってデータを「表示」する必要があります。データが非常に密集しているので、より多くのデータをロードし、ビューに表示されていないデータをメインメモリから削除することによって、詳細レベルを徐々に増やしたいと思います。

関連するレコードのグループにリアルタイムでアクセスして同様のレコードを事前ロードして、ローディング時間を最小限に抑えることもできます。これにより、非常に遅いインターネット接続でYouTubeでビデオを見るのと同じような経験ではなく、データを見るためのスムーズなコントロールが可能になります。ユーザーはランダムに操作することはできませんし、コントロールを使用してナビゲートする必要があります。この情報を使用して、関連するレコードをメインメモリにロードします。

データは、現在メインメモリにあるものに基づいてディスクから徐々にロードする必要があります。現在のコンテキストで必須ではないメインメモリ内のレコードを削除し、必要に応じて再ロードすることができます。

  1. は、どのように私はいくつかのハッシュ番号データは、現在のコンテキストで表示される場合、私は、メインメモリを管理しませんが大きすぎるどのよう

  2. に基づいて、高速でディスクからデータにアクセスします。あなたの答えが詳細レベルであれば、大きなデータセット用にどのように構築すればいいのですか?このデータはファイルの一部であるべきですか?

私はこの2週間、この作業に取り組んでおり、IOスピードが原因で固まっているようです。

私はネイティブC++で作業しています。私はGPLで仕事をすることはできません。それ以上の情報が必要な場合は、私に知らせてください。あなたはファイルをメモリにマッピングすることができ、最も近代的なファイルシステム(Linuxでは、Unixでは、Windowsの場合)の下

ラム

+0

また、私はファイルフォーマットを変更し、自分の好みに合わせてデータを整理することができます。私はOpenGLを使ってデータを見る。 – Ram

+3

このデータをデータベースに移植することを検討しましたか?まともなデータベースなら、これらの問題をすべて解決することができます。PostgeSQLには、役に立つ拡張が表示されるグラフもあります – Swiss

答えて

1

これは、あたかも完全にメモリ内にあるかのようにファイルの内容にアクセスできることを意味します(例えばdata [i ++]、strchr(data、..)などを使用できます)。使用されたメモリとファイルの間。メモリにまだ入っていないデータを読みたい場合、o/sはファイルからデータを取り出します。私はあなたが多分(あなたのプログラムがどのように動作するかに依存して、表示するために必要なものデータ)だけという、ゲーム内店舗レベルのジオメトリに使用しているもの、あなたがに似た組織を探していると思うMmap() an entire large file

0

: あなたはこの質問の答えをお読みください1つの次元だけが必要です。 Quadtreeと同様の方法(その記事の一番下)を参照してください。