全新推出 Cloud Firestore(测试版):试用 Firebase 和 Google Cloud Platform 全新推出的规模可扩展且灵活的数据库。详细了解 Cloud Firestore

将数据编入索引

Firebase 允许您使用任意子键对数据进行临时查询。如果您事先知道您的索引将是什么样子,您可通过 Firebase 实时数据库规则中的 .indexOn 规则来定义索引,以改进查询的效果。

定义数据索引

Firebase 提供了强大的工具,用于对您的数据进行排序查询。尤其值得一提的是,Firebase 允许您使用任何常见子键对节点集合进行临时查询。但随着应用的规模不断发展,这种查询的效果会越来越差。但是,如果您告诉 Firebase 您将查询的键,Firebase 将在服务器上将这些键编入索引,从而改进查询的效果。

使用 orderByChild 编制索引

要介绍这一操作,最简单的方式是举例说明。Firebase 团队的所有成员都觉得恐龙很酷。以下是摘自恐龙信息示例数据库中的代码片段。我们将使用该代码片段来解释 .indexOn 如何与 orderByChild() 搭配使用。

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

假设在我们的应用中,我们经常需要按照名字、高度和长度来对恐龙进行排序,而从不会按照重量排序。我们可以通过告诉 Firebase 这些信息来改进查询效果。由于恐龙的名字本身就是键,Firebase 已经优化了通过恐龙名字进行的查询,因为这是已经记录在案的键。我们可以使用 .indexOn 告诉 Firebase 也优化使用高度和长度进行的查询:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

与其他规则一样,您可以在规则的任何层级指定 .indexOn 规则。在上例中,我们将其置于根目录层级中,因为所有恐龙数据都存储于数据库的根目录下。

使用 orderByValue 编制索引

在此示例中,我们将演示如何将 .indexOnorderByValue() 搭配使用。比方说,我们正在使用以下数据制作一个恐龙体育成绩排行榜:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

由于我们使用 orderByValue() 制作排行榜,我们可以通过在 /scores 节点上添加 .value 规则来优化查询:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}

发送以下问题的反馈:

此网页
Firebase 实时数据库
需要帮助?请访问我们的支持页面