2012-04-23 124 views
2

(不是字符串:: MAX_SIZE大)我有一個巨大的文本文件(5GB〜)這是我的程序數據庫。在運行期間,這個數據庫是完全讀取多次與字符串函數像string :: find(),string :: at(),string :: substr()...C++讀取大文件的文本字符串

問題是,該文本文件不能因爲string :: max_size肯定是太小了。

你將如何實現這一點?我有一個想法加載一個部分字符串 - >閱讀 - >關閉 - >加載另一部分相同的字符串 - >閱讀 - >關閉 - > ... 有更好/更有效的方法嗎?

+1

我認爲你想這樣做的事實表明一個很差/懶惰的設計(對不起)。您至少可以創建簡單的函數來搜索文件本身,而不是將整個內容加載到內存中並使用它。請記住,如果有足夠的內存可用,而且你經常這樣做,大多數現代操作系統都會將其保留在RAM中,所以不應該有一個巨大的瓶頸。 – delicateLatticeworkFever 2012-04-23 12:44:02

+2

假設在程序的硬件需求中添加「64位處理器和8GB RAM」不是一種選擇嗎?在開發工作方面,這是迄今爲止最有效的解決方案。否則,使用真正的數據庫可能是一個好主意。 – 2012-04-23 12:44:14

+0

哪個操作系統/編譯器? gcc/linux 64位有一個「2^62」max_size「。 – 2012-04-23 13:03:35

回答

1

你會如何實現這個?

使用真正的數據庫,例如SQLite。從索引中獲得的性能改進不僅可以彌補您學習其他API的時間。

0

由於這是一個數據庫,我假設它會有很多記錄。對我而言,暗示最好的想法是爲每個記錄實現一個數據類,並根據計劃使用它的方式填充一個list/vector/etc。由於文件很大,我也會考慮持久性緩存。

而在你的容器類的所有記錄中,你可以實現搜索等功能,你認爲合適的。但是正如對於這個大小的db所建議的那樣,您可能最好使用數據庫。