Firebase中有很多单值读取或一个多值读取

时间:2013-12-11 01:05:12

标签: firebase

我想使用firebase在我的网站中加载2D地图。当用户滚动地图时,将会有动态加载字段,并且还会显示已更改的地图字段。

但我感兴趣的是更有效率。

即使我只需要大约50%的加载字段(例如100个加载字段),也可以读取值列表

geoRef.startAt(null, start).endAt(null, end).on('value', callback);


maybe better: 
geoRef.startAt(null, start).endAt(null, end).once('value', callback);
geoRef.startAt(null, start).endAt(null, end).on('child_changed', callback);

或读取大量单值(例如50x)

geoRef.child(valueX).child(valueY).on('value', callback);

将为每个用户滚动触发这些读取。这样就会有很多50倍对1倍(50%)的读数。

谢谢

1 个答案:

答案 0 :(得分:3)

如果没有细节,就不可能专门回答这个问题。我们是在讨论1000个记录,每个记录是10个字节,还是100万个记录,每个记录是5MB?

此处考虑数据大小和网络带宽,而不是连接数。 Firebase拥有一个向服务器打开的套接字,因此建立TCP连接的开销不是问题(就像多个HTTP请求一样),尽管请求从服务器返回的时间(延迟)是。

这只留下两个考虑因素:数据量和记录数量。

例如,如果我的系统包含1002条记录并且我想要1000条记录,并且每条记录大小为1KB,那么一次只需要它们就会更快(因为这只需要等待一个响应的延迟从服务器)。但如果我想要其中的10个,单独请求它们可能会更快。

更理想的是使用优先级对它们进行分段,或者按类别,时间范围或其他上下文将它们巧妙地分成多个路径。然后,我只能将数据段作为单个事务检索。

例如:

/messages/today
/messages/yesterday
/messages/all_messages

现在,假设today以百为单位测量,有效载荷为1KB,我可以抓住整个列表并随时在客户端迭代 - 不值得单独抓取它们。如果这是我的常见用例,那就完美了。

假设all_messages是在数百万条记录中测量的,每条记录大约1KB,那么从这里抓取100条消息,我自然会倾向于单独抓住每条记录。