我制作的统计分析应用需要在本地存储大量数据。为了让您了解我正在谈论的内容,我已经做了这个例子(不是完全正确的信息,但非常相似):
该应用程序将跟踪数千个目的地,包括目的地人口,温度,汽车数量等。这些数字将以图表形式显示,以便您可以查看数字"开发"随着时间的推移。这将持续很长一段时间,换句话说:每千个城市的每种数据类型都有数千个日期。
要实现这一点,我需要保存大量数据,并且最好在本地完成(这是疯了吗?)。我在深入挖掘核心数据的基础,或者在SQLite中使用我已经不错的技能之间陷入了困境。
如果您建议我应该使用SQLite,您能否参考如何将其实现到您的应用程序中(某些代码可能?)。
如果你建议我应该使用核心数据(主要是为了性能),请告诉我如何使用实体,属性,关系等来实现这种类型的数据模型。我可以想象使用保存在核心数据中的字典将是一个好的解决方案?
提前谢谢。
答案 0 :(得分:9)
如果您使用Swift与SQLite合作 - 我高度建议使用this项目。我在我当前的项目中使用它并且它非常棒并且完美地工作(我对项目或作者没有任何关联)。您实际上将该项目拖入您的项目并将其变为子项目,然后您只需将其设置为1.目标依赖项,2。要链接的框架,3。复制框架(构建阶段),它只是起作用。然后,您可以使用出色构造的Swift接口处理数据库,而不是使用丑陋的libsqlite调用。
我已将它用于适量的数据。一些数据库和多个表。干净直观。到目前为止,我还没有找到任何一种bug。当我询问有关未记录的功能的问题时(但实际上存在并且有效,事实证明),作者斯蒂芬·塞利斯(Stephen Celis)做出了回应。这是一个巨大的努力。
它如此干净,与Swift紧密集成,如果我不知道更好,我认为Apple本身会为Swift语言添加SQLite支持。
答案 1 :(得分:4)
核心数据是一个对象持久性模型 - 确实是你的答案,因为每个对象都有一点开销,因此一次在内存中拥有数千个对象是有问题的。如果您已经知道SQL,那么这是另一个好处。
(讨论核心数据的整体优点超出了这个问题的范围。我认为,“音乐”应用程序使用包含数千个项目的核心数据将其拉出来,但因为它只需要显示项目的子集。 Map Kit下降到C,并且通过数万个单位数字节项完全处理了自己,你可以看到使用Map Kit应用程序运行仪器。)
我在iOS中使用了SQLite并且它不是问题,基于C和Objective C是C的严格超集。有各种“包装”但仔细看看这些,以防它们带你回到每一个-ROW-一个对象。我没有使用它,发现SQLite C设置很棘手但很好。编辑:我使用了this tutorial,现在已经过了目标C,但是有关如何集成SQLite的清晰概述。
唯一的问题是,如果您发送大量数据并希望保存到该数据库,iOS中的捆绑/文档区别会抓住您:您无法修改捆绑中的文件,因此您需要创建或复制一个SQL数据库到文档文件夹1次,也许在第一个应用程序启动时,使用它。由于您无法从捆绑包中删除,现在您拥有了两次数据库。 iOS设置方式固有的问题。