代码之家  ›  专栏  ›  技术社区  ›  GingerBreadMane

nsarray与sqlite在iphone上的复杂查询

  •  1
  • GingerBreadMane  · 技术社区  · 16 年前

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

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

    3 回复  |  直到 16 年前
        1
  •  4
  •   Marcelo Cantos    16 年前

    可以将sqlite用作内存数据库。用文件名初始化 ":memory:" . 由于sql引擎和动态类型系统的开销,sqlite的性能永远不会像手工编制的数据结构那样好。但它可能仍然会产生非常好的结果,方便和全面的 自组织网络 SQL。您甚至可以向内存中的数据库添加索引,以帮助提高查询性能。

        2
  •  0
  •   Daniel    16 年前

    如果性能是您的关键标准,那么您应该使用一个浮点数数组来表示您的点,而不是像它将得到的那样快的nsarray。 如果确实要使用sqlite,可以将其配置为作为内存数据库运行,请参见 here 详细情况。

    如果您真的想降低性能,那么您可以考虑使用llvm动态生成机器代码来遍历您的数据集,但这可能是过度终止;)

        3
  •  0
  •   Alex Reynolds    16 年前

    我认为核心数据和sqlite都实现了缓存,这样您就可以轻松地查询和使用关系数据库。应该值得调查。

    推荐文章