What's the best practice to store complex data structure in core data on iOS?
我有一个复杂的数据结构以及一些用于查询的其他数据字段,需要与核心数据一起保存以备将来使用。我正在考虑将复杂的数据结构序列化为 JSON 字符串,并将其作为一个字符串字段存储在核心数据实体中,而不是创建具有许多属性的实体。这个复杂的数据结构纯粹是为了将来使用而保存的,不需要查询任何属性,但是我确实需要查询其他数据字段,所以我正在考虑使用核心数据。
我想知道这(存储为 JSON 字符串)是最佳实践还是有更好的解决方案?
简短的回答,不,这不是最好的解决方案。如果你不想用你创建的数据模型来存储对象,那么 Core Data 会给你带来很少的好处。您基本上将拥有一堆不透明的对象,除非您反序列化其 json 字符串,否则您将无法区分这些对象。如果这足以满足您的需求,那么我建议您将对象归档到磁盘并跳过 Core Data 的开销。
- 在我的场景中,我有一个复杂的数据结构和一些我计划存储在核心数据中的其他属性。这基本上是一个任务队列,我有任务元数据,它是一个复杂的数据结构,还有一堆其他字段,例如owner、priority、time、jobid ...,我需要对这些字段进行查询,但只有任务作业线程需要任务元数据中的数据。
-
啊,我没有意识到你的问题的措辞。我仍然建议不要这样做,因为这感觉像是对 Core Data 的滥用(如果您已经有了数据模型,为什么现在退出并用这些数据作弊?)。但是....我认为这不会导致任何技术问题,只要您按原样对待它,这基本上是一个您无法搜索、排序或过滤的二进制字段。
-
谢谢@Paul,是的,它有效,我正在寻找"最佳实践"。如果我不核心数据,你建议使用什么?我正在考虑将数据存档或序列化到磁盘,但它不适合查询。
-
如果这只是您不需要检查数据本身的不透明数据,那么我会说将其存档到磁盘,将路径存储在您的核心数据对象上。如果您需要反序列化这些对象以找出您正在寻找的对象,那么我会说咬紧牙关,只需将其添加到您的数据模型中并将其与您的其他核心数据实体相关地存储。通过将它们存储为原始 json,您试图避免的痛点是什么?
-
谢谢@保罗。这个数据结构包含嵌套的字典和数据数组,如果我将它们创建为实体,我最终可能会创建多个相关的实体,要么存储数据,要么读取数据将是相当多的代码......不整洁。 JSON 或 XML 似乎是存储此类数据的最佳格式。我有点不喜欢档案的存储文件路径的想法......
-
我不确定要建议什么其他解决方案。如果您的数据具有不可预测的模式,那么归档字典和数组的组合对我来说似乎是一个不错的选择。你有什么不喜欢这种方法的具体原因吗?我不确定还有什么建议。