2010-06-24 96 views
4

我正在編寫一個應用程序,該應用程序解析一個大文件,生成大量數據並使用它進行一些複雜的可視化。由於所有這些數據都不能保存在內存中,因此我做了一些研究,並開始將嵌入式數據庫視爲這些數據的臨時容器。何時使用嵌入式數據庫

我的問題是:這是解決這個問題的傳統方式嗎?並且是一個嵌入式數據庫(除了構造數據)應該通過在內存中保存一個子集(像緩存)來管理數據,而其餘的則保存在磁盤上?謝謝。

編輯:澄清:我正在寫一個桌面應用程序。該應用程序將被輸入一個大小爲100 Mb的文件。閱讀文件後,應用程序將生成大量可視化的圖形。因爲,圖表可能有如此大量的節點,它們可能不適合內存。我應該將它們保存到一個嵌入式數據庫中,該數據庫將只保留內存中的相關數據嗎? (嵌入式數據庫是否這樣做?),或者我應該編寫自己的複雜模塊來完成這個工作?

+0

我的答案沒有解決您的問題嗎? – 2010-07-01 18:34:56

回答

7

棘手的問題 - 但我會分享我的經驗,讓你決定是否有幫助。

如果您需要從處理源文件保留的輸出,你用它來產生多個意見所得到的數據,那麼你可能考慮使用的嵌入式數據庫。原因使用嵌入式數據庫(恕我直言):

  • 要利用RDBMS功能(ACID,關係,外鍵約束,觸發器,聚集......)
  • 爲了更容易導出以靈活的方式
  • 數據要允許訪問您處理的數據對外部客戶端(稱爲格式)
  • 爲了讓數據更靈活的轉換觀看

因素做準備時,你在作出決定時應該考慮:

  • 什麼是目標平臺(s)(windows,linux,android,iPhone,PDA)?
  • 什麼技術基礎? (Java,.Net,C,C++,...)
  • 預期或需要設計哪些資源約束? (RAM,CPU,HD空間)
  • 需要考慮哪些操作行爲(連接到網絡,斷開連接)?

在典型的現代桌面上,有足夠的備用容量來處理大多數操作。在eeePC,PDA和其他便攜式設備上,可能不是。在嵌入式設備上,很可能不是。您使用的語言可能具有幫助進行內存管理的功能 - 也許您可以利用這些功能。連接性方面(有狀態/無狀態/等)可能會影響您在任何給定點上確實需要保留在內存中的多少。

如果你正在處理真的很大的文件,那麼你可能會考慮採用流處理方式,這樣你一次只能在內存中佔用一小部分數據 - 但這並不意味着你應該或者不應該)使用嵌入式數據庫。直的文本或二進制文件也可以工作(基於記錄,基於列,基於行...)。

有些數據庫將允許您在數據存儲後與數據進行交互的更有效方式 - 這取決於引擎。我發現如果你的基本文件需要很多聚合(我的意思是你最初從最初的源文件生成的文件),那麼RDBMS引擎對簡化你的邏輯非常有幫助。其他選項包括構建基本變換,然後添加其他步驟以將其處理到每個特定視圖的其他臨時存儲中,然後再處理它們以呈現到目標(報告?)格式。

只是一個意識流的反應 - 希望有一點幫助。

編輯:

根據您的進一步澄清,我不知道一個嵌入式數據庫是要採取的方向。你或者需要做一些簡化的假設來渲染你的圖或者像分割一樣調查方法(渲染圖的部分,然後在渲染下一部分之前緩存輸出)。