Firebase警告:使用未指定的索引

hyp*_*kcb 18 javascript nosql firebase firebase-realtime-database

我从Firebase获取此警告消息,用于orderByChild我在JavaScript查询中使用的每一个:

FIREBASE警告:使用未指定的索引.考虑在/ tables中添加".indexOn":""到您的安全规则以获得更好的性能

到目前为止,我的查询运行速度非常快,所以我认为没有必要包括indexOn.只是想知道什么是负面影响?

另外,我如何实际禁用警告,因为在调试时它们非常烦人.

小智 13

如果您处于开发阶段,您将感觉不到差异.但随着数据的增长,索引有助于提高查询速度.

阅读本文以了解有关索引优势的更多信息. https://firebase.google.com/docs/database/security/indexing-data

据我所知,要禁用警告,您必须编辑firebase源代码. 有没有办法禁用所有firebase日志记录到控制台?


Fra*_*len 8

正如其他人所说:如果你没有定义索引,所有过滤都发生在客户端.这在初始开发期间可能很好,但随着您添加更多数据,它变得越来越浪费.

要解决此问题,请在Firebase数据库规则中定义正确的索引.您可以在项目的Firebase控制台的" 数据库"面板中修改规则.请参阅Firebase文档中的定义数据索引.

有什么方法可以让我观察索引中发生的变化吗?

  1. 定义正确的索引后,警告将从JavaScript控制台中消失.
  2. 此外,您还可以在浏览器开发人员工具的"网络"标签中查看Firebase客户端与服务器之间的流量.在定义正确的索引之前,您将看到Firebase客户端下载该位置中的所有数据(因为它在本地执行过滤).定义正确的索引后,您将看到Firebase客户端仅下载与查询匹配的数据.

  • 嘿对不起,但如果我错了,请纠正我。假设我有 100 条用户记录,然后我想使用 orderByChild 根据电子邮件获取某些用户详细信息。所以没有索引,基本上客户端会下载所有100条用户记录,然后在客户端进行过滤。但是通过索引,当我将 email 参数传递给 firebase 时,firebase 后端实际上会执行过滤器,并将匹配的用户返回给客户端。那是对的吗? (2认同)

Ikr*_*ula 6

Firebase提供了用于排序和查询数据的强大工具。索引可以提高查询的性能。考虑一个名为的表,其中dinosaur包含一些数据,例如:

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}
Run Code Online (Sandbox Code Playgroud)

您需要(搜索)排序恐龙的高度和长度,但不要按重量排序。因此您需要为dinosaur表设置规则,例如:

"rules": {
  "dinosaurs": {
    ".indexOn": ["height", "length"]
  }
}
Run Code Online (Sandbox Code Playgroud)

通过告知Firebase此信息,Firebase可以使用它.indexOn来优化我们的高度和长度查询。然后,我们维护了Firebase用于查询数据的安全性,并且还改善了查询的性能。