【问题标题】:NSArray vs. SQLite for Complex Queries on iPhoneiPhone 上复杂查询的 NSArray 与 SQLite
【发布时间】:2011-02-14 17:00:41
【问题描述】:

在为 iPhone 开发时,我收集了一些需要对其进行复杂查询的点。例如:“多少点的 y 坐标为 10”和“返回所有 X 坐标在 3 到 5 之间且 y 坐标为 7 的点”。

目前,我只是循环遍历 NSArray 的每个元素并检查每个元素是否与我的查询匹配。不过,编写查询很痛苦。 SQLite 会好很多。我不确定哪个会更有效,因为 SQLite 数据库驻留在磁盘上而不是内存中(据我所知)。 SQLite 在这里会一样高效还是更高效?或者除了这些我没有想到的方法之外,还有更好的方法吗?我需要对多组点执行数千次查询,因此最佳性能很重要。

【问题讨论】:

    标签: iphone sqlite nsarray


    【解决方案1】:

    您可以将 SQLite 用作内存数据库。只需使用文件名":memory:" 对其进行初始化。由于 SQL 引擎和动态类型系统的开销,SQLite 永远不会像精心设计的数据结构那样执行。但由于 ad hoc SQL 的便利性和完全通用性,它仍然可能产生非常好的结果。您甚至可以向内存数据库中添加索引以提高查询性能。

    【讨论】:

      【解决方案2】:

      如果性能是您的关键标准,那么您应该使用浮点数组来表示您的点,而不是使用 NSArray,因为它会尽可能快。 如果你真的想使用 sqlite,可以将其配置为内存数据库,详情请参阅here

      如果你真的想降低性能,你可能会考虑使用 LLVM 动态生成机器代码来迭代你的数据集,但这可能已经过时了 ;)

      【讨论】:

      • OP 正在为 iPhone 编程。动态生成机器码是不可能的。
      【解决方案3】:

      我认为 Core Data 和 SQLite 都实现了缓存,因此您可以轻松查询并获得关系数据库的强大功能。应该值得研究。

      【讨论】:

        猜你喜欢
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 2015-07-16
        相关资源
        最近更新 更多