2016-03-06 183 views
0

是如何工作的。如果我们有像快照火力地堡

"user":{ 
    "A":"1" 
    "B":"2" 
    "C":"3" 
    ... 
} 

当我们在斯威夫特调用数据集:

let ref = Firebase(url:"something/user") 
ref.observeEventType(.Value, withBlock: { snapshot in 
    print(snapshot.value) 
}) 

我们可以看到快照都有从数据库中的所有数据。快照是否动态调用Firebase中的每个数据以提供值?或者它一次获取所有数据并保存在本地? 在另一个字,我们可以有从火力地堡的方式仅提取部分数据(如只有A,B,如果我们再次调用它,快照将获取C,d)?我们是否别无选择,只能一次获取平坦的数据?

+0

这个问题不清楚一点点,但如果你问,如果你能读值一次一个,答案是肯定的。 .childAdded一次读入每个孩子,然后每次添加新孩子时都会触发。另外,如果您知道数据的特定路径,则可以读入该节点。例如;用户和密钥的列表是他们的名字和值是他们的姓氏(这是一个*坏*的想法,但为了清晰起见使用它),并想知道用户鲍勃的价值是什么。 ref是let ref = Firebase(url:“user/bob”)。你的快照将包含鲍勃的钥匙和他们的姓氏的值。 – Jay

+0

@Jay,我很抱歉,您对此不清楚。但是,我的意思是,当数据集发生变化或有新数据进入时,不会读取数据。我所要求的是假设我们有一个大型数据集。我们可以部分阅读它以节省网络的一些流量吗? –

回答

2

当你拨打:

ref.observeEventType(.Value 

你注册监测数据库中的位置的值。最初,只要该位置的值发生更改,服务器就会将该值的快照发送给客户端。

在火力地堡的数据库,你只能得到完整的节点。没有办法获得一个局部节点。

+0

谢谢,这是我问的。但是还有另一个问题出来。假设我们在10MB有一个节点的数据集规模,它需要一定的时间(大概10秒)时,前端尝试获取来自火力地堡中的数据,使用户成为不愉快的等待数据下载。有什么办法可以避免这种情况?或者我应该管理后端从一开始就拆分表格? –

+0

如果你的数据结构是导致问题(如不愉快的用户体验),那么你或许应该使用不同的数据结构。 –

0

您可以使用诸如queryOrderedByKey,queryOrderedByValue或queryOrderedByChild第一数据进行排序。然后,通过使用诸如queryLimitedToFirst,queryLimitedToLast,queryStartingAtValue,queryEndingAtValue或queryEqualToValue litmit结果的数目。

更多信息请阅读火力地堡单证: https://firebase.google.com/docs/database/ios/lists-of-data