2011-07-19 83 views
1

我們應該使用核心數據存儲圖像嗎?這被認爲是一種好的做法嗎?我認爲它可能會有更少的內存足跡,因爲核心數據會在對象被實際訪問之前將對象故障。將圖像存儲在覈心數據中

+0

如果將圖像存儲到核心數據中,則會使數據庫變得沉重。我猜如果你把圖像的內存和文件路徑中的某些獨特名稱存入數據庫,它可能會很好。但我認爲這可能會很棘手。 – Exploring

回答

1

這並不理想。

人們這樣做(包括我)。我使用數據轉換器,效果很好。

一個選項是存儲文件名。

即將發佈的CoreData版本將會有更好的選擇。

0

根據其實蘋果的文檔,你應該使用取決於文件大小核心數據:看核心數據編程指南本章內容:

大型數據對象(BLOB) 如果應用程序使用大的BLOB(「二進制大對象「如圖像和聲音數據),則需要注意將開銷降至最低。 「小」,「適度」和「大」的確切定義是流暢的,取決於應用程序的用法。一個寬鬆的經驗法則是,大小爲千字節大小的對象大小適中,大小大小爲兆字節大小。一些開發人員在數據庫中使用10MB BLOB獲得了良好的性能。另一方面,如果應用程序在表中有數百萬行,則甚至128個字節可能是「適度」大小的CLOB(字符大對象),需要將其標準化爲單獨的表。

一般來說,如果您需要將BLOB存儲在持久性存儲中,則應使用SQLite存儲 XML和二進制存儲需要整個對象圖駐留在內存中,並且存儲寫入是原子的(請參閱「持久存儲特性」(第130頁)),這意味着它們無法有效處理大型數據對象。 SQLite可以擴展以處理超大型數據庫。正確使用時,SQLite爲數據庫提供高達100GB的高性能,單行可以容納1GB(儘管無論存儲庫有多高效,讀1GB數據到內存中都是昂貴的操作)。

BLOB通常表示實體的屬性 - 例如,照片可能是Employee實體的屬性。對於小到中等大小的BLOB(和CLOB),應該爲數據創建一個單獨的實體,並創建一對一的關係來代替該屬性。例如,您可以使用它們之間的一對一關係創建員工和照片實體,從員工到照片的關係將替換員工的照片屬性。此模式最大限度地提高了對象錯誤的好處(請參閱「錯誤和取消定義」(第109頁))。只有在實際需要的情況下(如果關係被遍歷),才能檢索任何給定的照片。

但是,如果您能夠將BLOBs作爲資源存儲在文件系統中並維護對這些資源的鏈接(如URL或路徑),則更好。然後您可以根據需要加載BLOB。

乾杯。