【问题标题】:What does a firebase index do under the hood?Firebase 索引在幕后有什么作用?
【发布时间】:2019-01-17 14:56:35
【问题描述】:

以编程方式,我已经能够为我的实时数据库实现规则和客户端查询,以查找用户表下的用户名是否存在。在创建 ".indexOn": "username" 规则之前,我收到一条警告说客户端正在下载所有数据并在客户端过滤它。

我的问题是“.indexOn”到底是做什么的?我不再收到那个警告了,所以我很好奇现在发送给客户的是什么?发送和过滤的只是用户名,没有其他内容吗?

为什么不在 firebase 服务器上进行过滤/查询,而是发回结果用户,这不是更有效/更安全吗?

我的查询是

db.database.ref(`/users`).orderByChild('username').equalTo(control.value)
                .once("value").then(res => {
                    return res.exists() ? {usernameTaken : true} : null;
                })

我的数据结构如下:

"users": {
    "UID": {
        "username" : "exampleName"
    }
}

只是想更好地了解发生了什么/发生了什么,谢谢!

如果需要更多信息,请告诉我。

【问题讨论】:

    标签: firebase firebase-realtime-database indexing


    【解决方案1】:

    根据documentation on indexing

    Firebase 允许您使用 任意子键。如果你事先知道你的索引是什么, 您可以通过 Firebase Realtime 中的 .indexOn 规则定义它们 提高查询性能的数据库规则。

    实时数据库不会事先知道您可能想要执行的所有类型的查询。它会提前创建一些索引,但是您需要告诉它何时要使用 orderByChild orderByValue 使用嵌套子项进行查询。

    客户端没有发送任何不同的东西。取而代之的是,服务器现在配备了一个索引,该索引可以有效地执行查询,而无需强制客户端接收所有数据并自行进行过滤和排序。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多