【问题标题】:Queries regarding firebase realtime database关于 firebase 实时数据库的查询
【发布时间】:2017-10-13 14:59:32
【问题描述】:

我在我的 android 应用程序中使用 firebase 实时数据库。我只想将最后一个条目插入数据库,而不是整个数据库同步。我正在执行以下操作。

FirebaseDatabase.getInstance().getReference("reference").limitToLast(1).addValueEventListener(this);

以下是我无法清楚理解的内容:

1.当我做一个limitToLast并添加一个监听器时,它是从数据库中下载整个数据到本地副本并传递给我最后一个条目的快照还是只下载最后一个条目?

2.当我删除监听器时,实时数据库和本地数据之间的同步是否停止或同步继续发生但没有调用onDataChange?

3.移除Value事件监听器和离线的区别。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    当您调用 limitToLast() 时,您会创建一个 Firebase 数据库查询。这样的查询只同步它匹配的数据,所以在你的例子中它只下载最后一个项目并用它调用onDataChange。然后当有人添加一个新项目时,它会再次调用 onDataChange 并使用新的最后一个项目。

    删除监听器会停止数据同步。

    离线会暂时停止数据同步,直到您致电goOnline()

    【讨论】:

    • 感谢您的回答。我的 Firebase 控制台中的“使用”选项卡显示我正在下载约 2MB 每小时,即使在此期间我没有任何活跃的听众。知道为什么会发生这种情况?
    • 从如此有限的信息中很难说。但是,如果您检查 Chrome 开发者工具的网络选项卡,您可以在 WS(用于 Web 套接字)面板中看到确切的流量。如果它下载的数据多于与查询匹配的数据,您可能忘记了put an index on the data。在这种情况下,您还会在 JavaScript 控制台中看到警告。
    • 我没有为数据建立索引,但为什么会下载不必要的数据?
    • 是的。在这种情况下,将下载该位置的全部数据,并在客户端完成排序/过滤。但是,如果您没有附加听众,正如您在第一条评论中所说,那将不适用。
    • 由于节点的键是自动索引的,而且我使用的是limitToLast,我假设我不必添加显式索引。
    猜你喜欢
    • 2022-01-05
    • 2023-02-04
    • 2020-09-23
    • 2019-07-31
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多