iOS 5数据存储:核心数据、SQL或其他选项



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

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

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

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

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

核心数据是唯一的选择。核心数据不是一个存储系统,而是一个对象图和持久性框架,可以使用SQlite来存储数据。

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

看看核心数据编程指南,核心数据和数据库之间的区别

编辑:

来自核心数据性能

核心数据是一种丰富而复杂的对象图管理能够处理大量数据的框架。SQLite存储可以扩展到TB大小的数据库,拥有数十亿行/表/列。除非你的实体本身有非常大的属性(尽管请参见"大型数据对象(BLOB)")或大型属性的数量,10000个对象被认为是一个公平的数据集的小尺寸。

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

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

";"小"谦虚";,以及";"大";是流动的,取决于应用程序的使用情况。一个松散的经验法则是,大小为千字节顺序的对象具有"大小";谦虚的";大小和大小为兆字节的那些是"1";"大";尺寸。

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

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

最新更新