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

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

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

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

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

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

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