2012-02-10 47 views
1

我有以下問題需要解決。我必須建立一個圖形瀏覽器來查看海量數據集。訪問光盤上的文件*實時*

我們有一些特定格式的文件,其中有數百萬條記錄代表實驗結果。每條記錄都代表大圖圖上的一個採樣點。我見過的最大檔案有4370萬條記錄。

一個平均文件包含10萬條記錄。每個記錄都很小(76字節+每個可選12字節)。完整的數據不能被加載到主存儲器中,因爲它太大。我構建了一種新的文件格式,將數據壓縮爲每個記錄48個字節,並將數據組織到彼此相關的塊中。我想通過在2D/3D圖中顯示記錄來「查看」數據。由於數據非常密集,我希望通過加載更多數據和刪除主視圖中未顯示的數據來逐步提高詳細程度。

我還想實時訪問關聯記錄組並預加載相似記錄以保持加載時間最小。這將使用戶能夠平滑地控制查看數據,而不是像在YouTube上觀看視頻一樣使用非常慢的互聯網連接。用戶不能隨意使用這些控件來導航,我想使用這些信息將相關記錄加載到主內存中。

數據必須根據當前主內存中的內容逐漸從光盤加載。主存儲器中當前上下文中不需要的記錄可以被刪除,並且如果需要的話可以重新加載。

  1. 如何在我基於某些哈希數字

  2. 做我管理主內存,如果在當前的背景下看待數據是如何過大高速從光盤訪問數據。如果您的答案是詳細程度,那麼如何構建一個大型數據集並將此數據作爲文件的一部分?

我在過去兩週一直在研究這個問題,而且由於IO速度,我似乎陷入了困境。

我在本地C++工作,我不能使用GPL下的工作。如果您需要更多信息,請告訴我。

拉姆

+0

此外,我可以自由更改文件格式並組織數據以適合我的目的。我使用OpenGL來查看數據。 – Ram 2012-02-10 07:59:03

+3

您是否考慮將此數據移植到數據庫?任何體面的數據庫都能夠解決所有這些問題。PostgeSQL甚至有圖形相關的擴展,你可能會發現有幫助 – Swiss 2012-02-10 08:11:37

回答

1

在大多數現代文件系統(Linux,Unix系統,Windows)中您可以將文件映射到內存中。

這意味着你可以訪問文件的內容,就像它完全在內存中一樣(例如你可以使用data [i ++],strchr(data,..)等),它是映射的操作系統在使用的內存和文件之間。當你想讀取一些尚未存在的數據時,o/s將從文件中讀取數據。 你應該閱讀這個問題的答案:Mmap() an entire large file

0

我認爲你正在尋找的組織類似於什麼是用於在遊戲中商店級別的幾何形狀,只是你也許(這取決於你的程序是如何工作的,你需要什麼樣的數據顯示)只需要一個維度。見Quadtree和類似的方法(該文章的底部)。