Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Управление индексами в Cloud Firestore

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

Создать отсутствующий индекс с помощью сообщения об ошибке

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

Перейдите по сгенерированной ссылке на консоль Firebase, просмотрите автоматически заполняемую информацию и нажмите « Создать» .

Используйте консоль Firebase

Чтобы вручную создать новый индекс из консоли Firebase:

изображение интерфейса индексации firestore в консоли firebase

  1. Перейдите в раздел Cloud Firestore консоли Firebase .
  2. Перейдите на вкладку « Индексы » и нажмите « Добавить индекс» .
  3. Введите имя коллекции и укажите поля, по которым вы хотите упорядочить индекс.
  4. Щелкните " Создать" .

Создание индексов может занять несколько минут, в зависимости от размера запроса. После их создания вы можете увидеть свои индексы и их статус в разделе Составные индексы. Если они все еще строят, в консоли Firebase есть строка состояния здания.

Удалить индексы

Чтобы удалить индекс:

  1. Перейдите в раздел Cloud Firestore консоли Firebase .
  2. Щелкните вкладку Индексы .
  3. Наведите указатель мыши на индекс, который вы хотите удалить, и выберите « Удалить» в контекстном меню.
  4. Подтвердите, что вы хотите удалить его, щелкнув Удалить в предупреждении.

Используйте интерфейс командной строки Firebase

Вы также можете развернуть индексы с помощью Firebase CLI . Для начала запустите firebase init firestore в каталоге вашего проекта. Во время установки интерфейс командной строки Firebase создает файл JSON с индексами по умолчанию в правильном формате. Отредактируйте файл, чтобы добавить дополнительные индексы, и разверните его с помощью команды firebase deploy . Если вы хотите развернуть только индексы, добавьте --only firestore:indexes . Если вы вносите изменения в индексы с помощью консоли Firebase, убедитесь, что вы также обновили локальный файл индексов. См. Справочник по определению индекса JSON .

Время построения индекса

Чтобы создать индекс, Cloud Firestore должен настроить индекс, а затем заполнить индекс существующими данными. Время построения индекса - это сумма времени настройки и времени обратной засыпки:

  • Настройка индекса занимает несколько минут. Минимальное время построения индекса составляет несколько минут даже для пустой базы данных.

  • Время обратного заполнения зависит от того, сколько существующих данных принадлежит новому индексу. Чем больше значений поля соответствует определению индекса, тем больше времени требуется для заполнения индекса.

Построение индекса - это длительная операция .

После запуска построения индекса Cloud Firestore присваивает операции уникальное имя. Имена операций имеют префикс projects/[PROJECT_ID]/databases/(default)/operations/ , например:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Однако вы можете опустить префикс при указании имени операции для команды describe .

Список всех длительных операций

Чтобы вывести список длительно выполняемых операций, используйте команду gcloud firestore operations list . Эта команда отображает текущие и недавно завершенные операции. Список операций в течение нескольких дней после завершения:

gcloud firestore operations list

Проверить статус работы

Вместо того, чтобы перечислять все длительные операции, вы можете перечислить детали одной операции:

gcloud firestore operations describe operation-name

Оценка времени завершения

Во время выполнения операции смотрите значение поля state для общего состояния операции.

Запрос статуса длительной операции также возвращает метрики workEstimated и workCompleted . Эти метрики возвращаются для количества документов. workEstimated показывает примерное общее количество документов, которые будет обрабатывать операция. workCompleted показывает количество документов, обработанных на данный момент. После завершения операции workCompleted отражает общее количество фактически обработанных документов, которое может отличаться от значения workEstimated .

Разделить работу workCompleted на работу workEstimated для приблизительной оценки прогресса. Оценка может быть неточной, поскольку зависит от отложенного сбора статистики.

Например, вот статус выполнения построения индекса:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Когда операция будет выполнена, описание операции будет содержать "done": true . См. Значение поля state для результата операции. Если в ответе поле done не установлено, то его значение false . Не зависите от наличия значения done для незавершенных операций.

Ошибки построения индекса

Вы можете столкнуться с ошибками построения индекса при управлении составными индексами и исключениями для индексов с одним полем. Операция индексирования может завершиться ошибкой, если Cloud Firestore обнаружит проблему с индексируемыми данными. Чаще всего это означает, что вы достигли предела индекса . Например, операция могла достигнуть максимального количества записей указателя на документ.

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