核心數據是一個功能豐富且複雜的對象圖管理框架,能夠處理大量的數據。 SQLite存儲可以通過數十億行,表和列擴展到TB級數據庫。除非您的實體本身具有非常大的屬性或大量的屬性,否則10,000個對象對於數據集而言被認爲是相當小的尺寸。處理大型二進制對象時,請查看二進制大型數據對象(BLOB)。
二進制大數據對象(BLOB)
如果應用程序使用二進制大對象(BLOB),如圖像和聲音數據,你需要照顧,以儘量減少開銷。一個對象被認爲是小的還是大的取決於應用程序的使用情況。一般規則是小於兆字節的對象是小型或中型,而大於兆字節的對象很大。一些開發人員已經在數據庫中使用10 MB BLOB獲得了良好的性能。另一方面,如果應用程序在表中有數百萬行,甚至128個字節可能是一個CLOB(字符大對象),需要將其標準化爲一個單獨的表。
通常,如果您需要將BLOB存儲在持久性存儲中,請使用SQLite存儲。其他商店要求整個對象圖駐留在內存中,並且存儲寫入是原子的(請參閱持久存儲類型和行爲),這意味着它們不能有效處理大型數據對象。 SQLite可以擴展以處理超大型數據庫。正確使用SQLite可爲數據庫提供高達100 GB的性能,單行最多可容納1 GB(儘管無論存儲庫有多高效,讀取1 GB數據到內存中都是昂貴的操作)。
BLOB通常表示實體的屬性 - 例如,照片可能是Employee實體的屬性。對於小到中等的BLOB(和CLOB),爲數據創建一個單獨的實體並創建一對一的關係來代替該屬性。例如,您可以使用它們之間的一對一關係創建員工和照片實體,其中從員工到照片的關係將替換員工的照片屬性。這種模式最大限度地利用了對象斷層的好處(參見斷層和非斷層)。只有在實際需要的情況下(如果關係被遍歷),才能檢索任何給定的照片。
但是,如果您能夠將BLOBs作爲資源存儲在文件系統上並維護對這些資源的鏈接(如URL或路徑),則更好。然後您可以根據需要加載BLOB。
+1。我不記得我在哪裏閱讀它,但有一個早期我學到的格言,如果我想弄清楚做什麼的限制,那麼我做錯了。 – 2011-04-19 13:38:14
@Philip Regan - 我們必須保存大量的圖像,因此現在更好地檢查它,而不是稍後再考慮它? – itsaboutcode 2011-04-20 04:49:23
如果ypu're保存圖片,最好將它們保存到文件中,並將一個URL存儲到Core Data中的所述文件中。存儲大量的二進制數據最好在其他地方完成。 – paulbailey 2011-04-20 07:45:55