Catch up on everthing we announced at this year's Firebase Summit. Learn more

Индексируйте ваши данные

Firebase позволяет выполнять специальные запросы к вашим данным с использованием произвольного дочернего ключа. Если вы заранее знаете , что ваши показатели будут, их можно определить с помощью .indexOn правила в вашей Firebase в реальном времени базы данных Правила безопасности для повышения производительности запросов.

Определение индексов данных

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 () , чтобы создать лидер, мы можем оптимизировать наши запросы, добавив .value правила в нашем /scores узле:

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