我理解使用可转换数据类型是在Core Data中存储数组或任何自定义对象的简单方法。我想知道何时不应该使用Transformable,而应创建另一个实体并使用多对多关系。
例如,如果它是字符串数组,是否存在最大元素数量或字符串最大长度会导致显著的性能问题?
我理解使用可转换数据类型是在Core Data中存储数组或任何自定义对象的简单方法。我想知道何时不应该使用Transformable,而应创建另一个实体并使用多对多关系。
例如,如果它是字符串数组,是否存在最大元素数量或字符串最大长度会导致显著的性能问题?
这实际上取决于您想如何使用 transformable 属性描述的数据。
Core Data 会在 SQLite 数据库中底层创建一个 blob 列,因此几乎不可能对属性进行任何真正的搜索或排序。
相反,通过逻辑实体(通过一对多关系)描述要存储的数据将允许您利用搜索和排序功能。
该实体还有另一个关键优势,即它可以被惰性加载。对于 transformable 属性,每次对象 fault 时,应用程序都需要加载数据,这可能会导致显著的性能问题。如果您将一组对象编码为 transformable 属性,则即使在不需要时,读取磁盘上的数据也会对应用程序产生负担。
就大小而言,您可以在 blob 中保留任意数量的数据,它是无界限的。但这再次涉及到这种设计的性能影响,特别是在 iOS 设备上,I/O 的代价非常高昂,内存受限,您的应用程序可能根本无法将数据从存储器读取到内存中(人们曾试图将电影文件放入 CoreData SQLite 存储中)。