簡體   English   中英

什么時候*不*使用核心數據類型可轉換?

[英]When *not* to use Core Data type Transformable?

我知道使用 Transformable 數據類型是在 Core Data 中存儲數組或任何自定義 object 的簡單方法。 我想知道什么時候應該使用 Transformable 而應該創建另一個實體並使用多對多關系。

假設它是一個字符串數組,是否存在會導致嚴重性能問題的最大元素數或字符串的最大長度?

我想知道什么時候不應該使用 Transformable 而應該創建另一個實體並使用多對多關系。

僅在絕對必要時才應使用可轉換屬性。 在某些情況下,它們不是便利或捷徑,而是資源密集型的必需品。

您很少使用 Core Data 來存儲像 arrays 或字典這樣的數據結構,因為 Core Data 主要不用於存儲/持久性,而是用於建模/模擬。 對數據進行建模以將數據結構變成一個大的、無邏輯的數據博客是沒有用的。

可轉換屬性通常用於存儲一些 class,這些 class 本身會主動管理其持有的數據,例如轉換 UIImage 以便您可以直接從 UI 商店中獲取 UIImage 並將其全部取回。

回答您的主要問題:

我對數據在影響性能之前可以有多大感到好奇,最好將它們標准化。

它主要取決於大小和復雜性的組合。 每當您將一堆現有對象轉換為數據塊時,您都必須通過轉換讀取整個博客。 因此,如果您通過轉換存儲一個 1mb 數組,則在運行反向轉換時,您會在 memory 中獲得一個 1mb 數組。 每次轉換,無論多么小,都比訪問普通屬性甚至查找另一個托管 object 花費更多的處理時間。 因此,擁有大量經常訪問的小型轉換也會導致相當大的性能損失。

將大塊數據分解為實體、屬性和關系總是更好。 這樣做可以免費為您提供 Core Data 的所有靈活性和優化。 我發現自己使用 Core Data 來代替 arrays 和字典,因為一旦你真正了解 Core Data,它就會更容易使用。

我永遠不會使用 Core Data 來存儲轉換后的字符串數組等。 如果字符串沒有邏輯並且只有幾十個,您不妨將數組寫入 plist 文件。 這將比使用可變形屬性更快更容易。

這實際上歸結為您希望如何使用可轉換屬性描述的數據。

Core Data 將在您的 SQLite 數據庫中創建一個 blob 列,因此幾乎不可能對屬性進行任何類型的真正搜索或排序。

相反,使用邏輯實體(通過一對多關系)描述您要存儲的數據將允許您利用搜索和排序功能。

該實體還有另一個關鍵優勢,即它可以延遲加載,使用可轉換屬性,您的應用程序將在每次 object 出現故障時消耗加載該數據的成本。 如果您將一組對象編碼為可轉換的屬性,這可能會在您從磁盤准備好數據時導致嚴重的性能問題,即使您不需要它也是如此。

就大小而言,您可以在 blob 中保留任意數量的數據,它是無限的。 這又歸結為這種設計對性能的影響,其中(特別是在 iOS 設備上)I/O 非常昂貴,並且 memory 受到限制,您的應用程序可能根本無法從存儲中讀取數據並將數據讀取到 ZCD69B4957F06CD8298D7BFDE已嘗試在 CoreData SQLite 商店中粘貼電影)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM