【问题标题】:iOS 5 Data Storage: Core Data, SQL or other options?iOS 5 数据存储:Core Data、SQL 还是其他选项?
【发布时间】:2012-03-29 20:03:05
【问题描述】:

我正在为 iPhone (iOS 5) 开发一个应用程序。我要做的是使用从服务器接收的二进制数据创建地图。有些问题实际上效果很好:

  • 我可以连接到服务器,发送请求并从中接收二进制数据
  • 我可以解释这些数据,从中创建对象(多边形和路径)并在视图中绘制它们

但现在遇到了困难的部分。我创建的地图应该是可缩放和可移动的。所以我必须向服务器发送新请求并重新绘制地图。这也很好用,但是我现在已经收到的数据需要存储,因为我不应该从服务器请求相同的数据两次(例如,如果我缩小然后再缩小)。

最后是我的问题:存储数据的最佳方式是什么?到目前为止,我一直在考虑使用 CoreData 或 SQLite。还有更好的解决方案吗?我应该保存哪些数据 - 二进制数据或我创建的对象?

我希望这是可以理解的,您至少可以帮助我解决我的一个问题...

【问题讨论】:

    标签: iphone sqlite core-data ios5


    【解决方案1】:

    核心数据是唯一的出路。 核心数据不是存储系统,是对象图和持久化框架,可以使用SQlite来存储数据。

    如果您使用核心数据,您可以重构您的项目并使用 managedObjects 子类作为模型。

    看看Core Data Programming GuideThe differences between Core Data and a Database

    编辑:

    来自Core Data Performance

    Core Data 是一个丰富而复杂的对象图管理 能够处理大量数据的框架。 SQLite store 可以扩展到 TB 大小的数据库,其中包含数十亿 行/表/列。除非你的实体本身有很大 属性(尽管参见“大数据对象 (BLOB)”)或大 属性数量,10,000 个对象被认为是相当的 数据集的小尺寸。

    【讨论】:

    • 感谢您的超级快速回答。所以你的意思是我应该保留我的对象并使用 CoreData 访问它们。我说对了吗?这仍然是海量数据的最佳选择吗?
    • 我已经编辑了我的帖子。如果您必须保存 blob,您可以将它们保存到文档目录并在 db 中仅保存它的路径。
    • 再次感谢您的帮助。现在我有一点要开始了。
    【解决方案2】:

    这实际上取决于您的数据对象的大小以及您访问它们的方式。如果您的对象很小,您可以将它们存储在 Core Data 中。但是,如果您的地图数据是来自一堆 URL 的图像,我会使用 Core Data 将映射存储到地图图像 URL 并使用 NSURLConnection 来管理对象的缓存。

    我推荐阅读Apple Core Data Programming Guide Large Data Objects (BLOBs),它讨论了对象的大小和数量。部分摘录如下:

    “小”、“适中”和“大”的确切定义是可变的,取决于应用程序的使用情况。一个宽松的经验法则是,大小为 KB 的对象属于“适度”大小,而大小为 MB 的对象属于“大”大小。

    对于小到中等大小的 BLOB(和 CLOB),您应该为数据创建一个单独的实体并创建一对一的关系来代替属性。

    但是,如果您能够将 BLOB 作为资源存储在文件系统上,并维护到这些资源的链接(例如 URL 或路径),那就更好了。然后,您可以在必要时加载 BLOB。

    【讨论】:

    • 感谢您的回复。我没有从服务器接收图像数据,而是接收包含经纬度点的对象。我还得到了每个对象的渲染规则,所以我知道如何绘制它。您能否定义一下您认为是“小”的对象
    • 用对象大​​小信息更新了答案。
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多