2011-10-12 75 views
2

我正在尋找C/C++/Obj-C的庫來維護磁盤緩存以供我的對象使用。用於維護磁盤緩存的庫

  • 有大量對象(數萬)的每個對象是100 + KB的大小
  • 對象不斷地訪問/添加,有時大組對象被替換

目前我只是將每個對象存儲在單獨的文件中,但我不想在文件系統中創建這麼多的文件。是否有任何庫可以使用這種緩存來使用一個/多個文件?

+0

壓縮庫會這樣做。看到這個[問題] [1]。 [1]:http://stackoverflow.com/questions/230984/compression-api-on-the-iphone –

+0

您可以創建一個對象,將持有的所有文件,並使其序列化來保存它的二進制文件,並添加到它的方法來讀取和寫入文件只有在需要時(它的性能是你關心的) –

回答

2

我用東京內閣圖書館解決了我的問題。工作比爲每個對象使用單獨的文件更快。

3

您可以使用所有對象創建一個集合(NSArray,NSSet,NSDictionary),並使用NSKeyedArchiver/NSKeyedUnarchiver將其放入單個文件中。

您也可以使用SQLite數據庫或CoreData,其優點是您不必一次將所有內容加載到內存中,只要您根據需要將對象從對象中拉出即可。特別是如果你有(數萬* 100 + Kb,這永遠不會適應記憶......)。你也可以使用C++序列化庫(儘管讓它們與obj c對象一起工作會很棘手......,更推薦用於C++對象),比如boost序列化/歸檔(可以輸出二進制,文本,xml),再次你可以使用集合(std :: list,std :: map ...)將它們全部存儲到一個文件中。

+0

我在想使用SQLite,但我不知道它的性能會有多好對象。另外我不需要SQL,簡單的key-> blob存儲就足夠了。我認爲應該有一些專門的緩存庫,但我找不到它。 – mifki

+0

從SQLite網站:SQLite中的字符串或BLOB中的最大字節數由預處理器宏SQLITE_MAX_LENGTH定義。這個宏的默認值是10億(1億或1,000,000,000)。 http://www.sqlite.org/limits.html – jbat100