在Firebase / Swift中检索5个最近用户的数据量最少?

时间:2016-05-09 02:23:43

标签: ios swift firebase location distance

我们假设我有一个像这样的Firebase设置,除了10,000个用户:

"users" : {
    "user 1" : {
      "latitude": 1234567,
      "Longitude": 7654321,
      "name": "Name 1"
    },
    "user 2" : {
      "latitude": 1234567,
      "longitude": 7654321,
      "name": "Name 2"
    },
    "user 3" : {
      "latitude": 1234567,
      "Longitude": 7654321,
      "name": "Name 3"
    },
    "user 4" : {
      "latitude": 1234567,
      "Longitude": 7654321,
      "name": "Name 4"
    },
  }

生成最接近我的5位用户列表的数据密集程度最低的方法是什么?对此非常陌生,因此我能想到的唯一解决方案是需要查询所有10,000个用户。

1 个答案:

答案 0 :(得分:2)

我对这个主题很新,所以我只能指出你正确的方向。基本上,您存储用户位置的方式并不是最佳的。最好的方法是使用GeoFire Firebase服务的新增功能。它的工作原理是您应该有一个大的位置对象,并使用该用户密钥存储这些用户的地理位置。这是一个例子。

   {
     Locations: {
        -KH35xPkJmX0UTSG8DuM : {
           "g" : "randomID",
           "l" : {
                  "0" : "latitude",
                  "1" : "longitude"
                 }
        }
     }
    }

   {
     Users: {
       -KH35xPkJmX0UTSG8DuM : {
         "username" : "Joe Sloan"
       }
     }
   }

您的location对象将拥有10,000个用户密钥和地理位置。 " g"的价值和" l"使用

时设置对象
   geoFire.setLocation(CLLocation(latitude: 37.7853889, longitude: -122.4056973), forKey: "firebase-hq")

Google已针对类似位置内的用户优化了查询。

    let center = CLLocation(latitude: 37.7832889, longitude: -122.4056973)
    // Query locations at [37.7832889, -122.4056973] with a radius of 600 meters
    var circleQuery = geoFire.queryAtLocation(center, withRadius: 0.6)

circleQuery变量应包含最近用户的Firebase字典。正如我所说,我还没有机会真正深入研究,但这应该会给你一个开始。