获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

索引您的数据

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 进行索引

在此示例中,我们将演示.indexOn如何与orderByValue()一起使用。假设我们正在使用以下数据制作恐龙运动分数排行榜:

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

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

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

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 进行索引

在此示例中,我们将演示.indexOn如何与orderByValue()一起使用。假设我们正在使用以下数据制作恐龙运动分数排行榜:

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

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

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