2016-11-23 65 views
0

我正在研究一个应用程序,该应用程序将使用用户的位置并通过URL中的邮政编码执行Web请求。这很快,通常需要1-3秒。我即将发布该应用程序,但阅读了使用条款,无法使用他们的服务与我的应用程序。自从我下载了一个77k的邮编电子表格,将其转换为JSON并将其上传到Firebase。我目前在我的应用中查询Firebase以搜索邮政编码,但现在需要大约10-15秒。我的代码如下:查询Firebase的最有效方式iOS

  • “位置”
    • “1”
      • ZIP:: “12345”
      • 如下

        func firebaseSearch(zipCode: String) { 
            let conditionRef = FIRDatabase.database().reference().child("locations") 
        
            let query = conditionRef.queryOrderedByChild("zip").queryEqualToValue(zipCode) 
        
            query.observeEventType(.Value, withBlock: { snapshot in 
        
             for child in snapshot.children { 
              print(child.value["state"]) 
        
             } 
        
            }) 
        
            } 
        

        我的火力被构造状态:“XX”

    • “2”
      • ZIP: “12345”
      • 状态: “XX”

我试图考虑我可如何构造的火力地堡是更有效率的,比如让州成为家长,并在里面输入孩子。我想上传所有条目作为邮政编码;不过,我的电子表格有太多重复的代码,并且我知道firebase不允许重复。有没有更有效的方法来查询Firebase?如果我从第一个邮政编码开始输入号码(当前从1开始到77k),那么我会从邮政编码中查询+/-值,然后过滤这些结果?我唯一的担心是看到最后一个邮政编码,这个邮政编号与实际邮政编码相差约20k。我很欣赏任何提示/建议,谢谢!

回答

0

Firebase建议避免嵌套数据,并且据我所知,您的结构很好,因为当您在某个位置获取数据时,它也会检索其所有子节点。你如何在你的应用中显示你的数据?

你可能会利用分页查询25个项目,然后加载下25个,等等?

query.limitToLast(25).observeEventType(.Value, withBlock: { snapshot in ... 
+0

感谢您的回应!我将如何使用分页?我认为limitToLast只使用了最后的25个条目?虽然我是新的firebase,所以我不太确定。再次感谢! – JD2017

+0

我建议你看看这篇文章的分页(http://stackoverflow.com/questions/37144030/how-do-you-properly-order-data-from-firebase-chronologically),因为它帮助了我,以及。 – waseefakhtar