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" } } }