我有一个应用程序,我在firebase表中有几千个条目。 现在有人正在连接到这个表,我需要计算并总结这些项目。
-itemlist
|
--1
|-x:2
--2
|-x:4
等等。用户可以随时连接(意味着他之前从未见过这个表),另一个用户可以在任何给定时间更改某个值或添加值。
现在,如果我尝试将ValueEventListener
添加到"项目列表"如果没有新数据,它会工作,但只要我连接到一个包含1000个条目的新数据库,监听器就会调用这1000个条目中的每一个。
我尝试使用onChildlistener,但这会在第一次调用为每个项目添加的on ChildItem。 这有时需要2分钟。
有没有办法让整个数据库一次,计算它然后只监听变化?
答案 0 :(得分:6)
Firebase数据库没有服务器端聚合运算符,因为它们本质上与数据库的可伸缩性和实时性不一致。
这为您提供了两种计算聚合的选项:
按照您的建议执行客户端
保留您每次更改时更新的正在运行的聚合
如果客户端已经需要显示数据,那么执行聚合客户端是一个不错的选择。例如:如果您要显示特定聊天室中的用户列表,则可以轻松地从同一数据中计算客户端的用户数。
但是如果您不需要数据客户端,那么只需下载它来聚合它就会浪费并且会损害您应用的可扩展性。在这种情况下,一个选项是保留一个额外的节点来保存聚合并用每个相关的写操作更新它。例如:如果要显示已向用户注册的用户数,则可以保留在用户注册/取消注册时更新的全局/user_count
。对于此更新,您通常使用transaction。