gpt4 book ai didi

iphone - 拆分 CoreData 以获得更快的查询时间

转载 作者:行者123 更新时间:2023-12-03 18:27:19 25 4
gpt4 key购买 nike

我有一个 巨大的 map 上路径的经纬度核心数据库。

我有一个称为方式的对象,它由一组有序的节点(lon,lat)组成。我还在途中存储了封闭框(minLon,minLat,maxLon,maxLat ...)。

Data Model

我的查询找到了 map 特定区域的所有方式:

NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"minLon < %f AND maxLon > %f AND minLat < %f AND maxLat > %f",
maxLon, minLon, maxLat, minLat];

它的大坝慢!

我加快查询速度的想法是以某种方式将数据按正方形区域拆分(多个表?多个 .sqllite 文件?创建位置的哈希?),因此要搜索的数据更少。

我怎样才能做到这一点?

最佳答案

  • 您可以通过将 Way 实体中的最小值/最大值存储为缩放整数而不是浮点数来加快查询速度。选择一个为您提供可接受的区域分辨率的比例因子,在您存储它们时使用它来预缩放值,并在您进行查询时使用相同的比例因子。
  • 您还可以查看添加 quadtree数据结构到您的核心数据模型,以便在所需区域的 Ways 上进行定位。
  • SQlite 将在复合谓词中失败的第一个测试中退出,因此首先将最便宜的测试放在首位。
  • 另请查看为这 4 个属性启用索引。

  • 老实说,我很惊讶这很慢。您的数据库中总共有多少条 Ways 以及您想要查询的区域中通常有多少条?

    您是否尝试过打开 SQL 调试以查看实际对数据库运行的查询? (提示:添加 -com.apple.CoreData.SQLDebug 1 作为运行行为的方案编辑器中的命令行参数)

    关于iphone - 拆分 CoreData 以获得更快的查询时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908851/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com