火力指数在引擎盖下有什么作用?

时间:2019-01-17 14:56:36

标签: firebase firebase-realtime-database indexing

通过编程,我已经能够为我的实时数据库实现规则和客户端查询,以查找是否存在users表下的Username。在创建“ .indexOn”:“用户名”规则之前,我收到警告,客户端正在下载所有数据并在客户端进行过滤。

我的问题是“ .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"
    }
}

只是想更好地了解发生的事情/方式,谢谢!

请让我知道是否需要更多信息。

1 个答案:

答案 0 :(得分:0)

根据documentation on indexing

  

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

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

客户端没有发送任何不同的内容。相反,服务器现在配备了一个索引,该索引可以有效地执行查询,而不必强迫客户端接收所有数据并自行进行过滤和排序。