Для переноса данных из базы данных Firestore Standard Edition в базу данных Firestore Enterprise Edition мы рекомендуем использовать один из следующих вариантов:
Функции импорта и экспорта . Файлы данных, полученные в результате импорта, совместимы как с версией Enterprise, так и со стандартной версией.
Шаблон Dataflow для связи между Dataflow
firestore-to-firestore. Сервис Dataflow позволяет создавать конвейеры обработки данных, а шаблонfirestore-to-firestoreсоздает пакетный конвейер между базами данных Cloud Firestore .
Импорт и экспорт — это более простой вариант, требующий меньшего количества параметров конфигурации.
Шаблон Dataflow обладает большей гибкостью в настройке. Вы можете расширить код шаблона для выполнения частичной миграции или преобразования данных. Вы также можете контролировать количество и размер рабочих процессов.
Оба варианта поддерживают миграцию между проектами и регионами.
Перенос данных с помощью экспорта и импорта.
Для переноса данных с помощью операций экспорта и импорта см. раздел «Экспорт и импорт данных» . Для перемещения данных в базу данных в другом проекте см. раздел «Перемещение данных между проектами» .
Перенесите данные с помощью шаблона Dataflow
Для переноса данных с помощью шаблона Dataflow firestore-to-firestore воспользуйтесь приведенными ниже инструкциями.
Прежде чем начать
Перед началом миграции данных убедитесь, что в исходной базе данных включено восстановление на определенный момент времени (PITR) . Задание Dataflow использует PITR для чтения данных в момент времени, указанный в PITR. Если PITR отключено, задание завершится с ошибкой, если его выполнение займет более одного часа.
Назначьте необходимые роли, описанные в следующем разделе.
Требуемые роли
Для переноса данных из одной базы данных в другую назначьте следующие роли. Также вы можете получить необходимые разрешения с помощью пользовательских ролей или других предопределенных ролей:
- Чтобы получить необходимые разрешения для создания новой базы данных и доступа к данным Cloud Firestore , попросите администратора предоставить вам роль Identity and Access Management (IAM) « Владелец Cloud Datastore» (
roles/datastore.owner) в вашем проекте. Чтобы предоставить заданию Dataflow доступ на чтение и запись к вашим базам данных Cloud Firestore , назначьте учетную запись службы рабочего процесса Dataflow (например,
PROJECT_NUMBER -compute@) роль IAM пользователя Cloud Datastore (roles/datastore.user) в вашем проекте.Для получения дополнительной информации о безопасности Dataflow см. раздел «Безопасность и разрешения Dataflow .
Для получения дополнительной информации о предоставлении ролей IAM см. раздел «Управление доступом к проектам, папкам и организациям» .
1. Создайте новую базу данных Firestore Enterprise Edition.
Для переноса данных из базы данных стандартной версии в базу данных корпоративной версии необходимо сначала создать целевую базу данных корпоративной версии. См. раздел «Создание базы данных» .
2. Запустите шаблон Dataflow firestore-to-firestore
Настройте и запустите задание Dataflow с помощью шаблона firestore-to-firestore . Шаблон поддерживает миграцию всей базы данных или только указанных групп коллекций.
Ограничения
Учитывайте следующие ограничения шаблона Dataflow для передачи данных firestore-to-firestore :
- Исходная база данных должна быть базой данных стандартной версии.
- В процессе миграции данные считываются в определенный момент времени. Мы рекомендуем включить восстановление на определенный момент времени (PITR) в исходной базе данных. Если PITR не включен, данные истекают через час, и этого может быть недостаточно для завершения миграции данных. PITR продлевает срок хранения данных до семи дней.
- Индексы не переносятся.
Задача Dataflow не переносит конфигурации базы данных, такие как политики времени жизни (TTL), резервные копии, PITR и управляемые клиентом ключи шифрования (CMEK).
Необходимо настроить эти параметры в новой базе данных. Для повышения скорости миграции данных подождите, пока миграция завершится, прежде чем настраивать TTL, резервное копирование и PITR в целевой базе данных.
Следующие примеры демонстрируют, как запустить шаблон с помощью Google Cloud CLI .
Перенести все данные
Для переноса всех данных используйте следующую команду:
gcloud dataflow flex-template run "JOB_NAME" \ --project "PROJECT" \ --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
Замените следующее:
-
JOB_NAME: название должности. -
PROJECT: идентификатор вашего проекта Google Cloud . -
REGION_NAME: местоположение Google Cloud , где вы хотите запустить задание Dataflow . Используйте местоположение, близкое к вашим базам данных. VERSION: версия шаблона, которую вы хотите использовать. Вы можете использовать следующие значения:- Для использования
latestверсии шаблона, доступной в родительской папке без указания даты в хранилище — gs://dataflow-templates REGION_NAME /latest/ - Название версии, например,
2023-09-12-00_RC00, указывает на использование конкретной версии шаблона, которая находится в соответствующей родительской папке с указанием даты в хранилище — gs://dataflow-templates REGION_NAME /
- Для использования
SOURCE_PROJECT_ID: идентификатор исходного проекта Google Cloud , содержащего базу данных Firestore Standard Edition.SOURCE_DATABASE_ID: идентификатор исходной базы данных Cloud Firestore .DESTINATION_PROJECT_ID: идентификатор целевого проекта Google Cloud для новой базы данных Cloud Firestore .DESTINATION_DATABASE_ID: идентификатор целевой базы данных Cloud Firestore .READ_TIME: метка времени для чтения данных из исходной базы данных. Устанавливается в формате RFC 3339 с точностью до минуты, например,2026-05-15T16:31:00.00Z.Самая ранняя действительная метка времени зависит от настроек восстановления на определенный момент времени (PITR). См. раздел «Получение самого раннего времени версии» .
Перенести указанные группы коллекций
Для переноса только определенных групп коллекций используйте следующую команду:
gcloud dataflow jobs run "JOB_NAME" \ --project "PROJECT" \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
Замените следующее:
-
JOB_NAME: название должности. -
PROJECT: идентификатор вашего проекта Google Cloud . -
REGION_NAME: местоположение Google Cloud , где вы хотите запустить задание Dataflow . Используйте местоположение, близкое к вашим базам данных. VERSION: версия шаблона, которую вы хотите использовать. Вы можете использовать следующие значения:- Для использования
latestверсии шаблона, доступной в родительской папке без указания даты в хранилище — gs://dataflow-templates REGION_NAME /latest/ - Название версии, например,
2023-09-12-00_RC00, указывает на использование конкретной версии шаблона, которая находится в соответствующей родительской папке с указанием даты в хранилище — gs://dataflow-templates REGION_NAME /
- Для использования
SOURCE_PROJECT_ID: идентификатор исходного проекта Google Cloud , содержащего базу данных Firestore Standard Edition.SOURCE_DATABASE_ID: идентификатор исходной базы данных Cloud Firestore .COLLECTION_GROUP_IDS: список идентификаторов групп коллекций, разделенных запятыми, для миграции.Вложенные коллекции не включаются рекурсивно. Например, если вы укажете группу коллекций
users, то миграция не будет включать в себя вложенную коллекциюmessagesпо адресу/users/userid/messagesесли вы также не укажете группу коллекцийmessages.DESTINATION_PROJECT_ID: идентификатор целевого проекта Google Cloud для новой базы данных Cloud Firestore .DESTINATION_DATABASE_ID: идентификатор целевой базы данных Cloud Firestore .READ_TIME: метка времени для чтения данных из исходной базы данных. Устанавливается в формате RFC 3339 с точностью до минуты, например,2026-05-15T16:31:00.00Z.Самая ранняя действительная метка времени зависит от настроек восстановления на определенный момент времени (PITR). См. раздел «Получение самого раннего времени версии» .
3. Настройте базу данных.
Задача переноса данных firestore-to-firestore переносит только данные. Индексы и другие параметры базы данных не переносятся . Помимо переноса данных, рекомендуется настроить следующие параметры в новой базе данных:
Индексы : Базы данных Firestore Enterprise Edition не требуют наличия индексов для выполнения запросов и не создают индексы автоматически по умолчанию. Для создания индексов для ваших запросов см. следующие инструкции:
- Обзор индекса Firestore Enterprise Edition .
- Оптимизируйте производительность запросов с помощью индексов .
- С помощью Firebase CLI можно экспортировать индексы и развернуть их в новой базе данных .
- Используйте Query Insights , чтобы определить запросы, которые можно оптимизировать с помощью индекса.
TTL : Создание политик TTL .
Резервное копирование : Настройте резервное копирование .
PITR : Включить PITR .
После настройки базы данных вы можете продолжить тестирование приложения с новой базой данных. Для полной миграции обновите свои приложения, чтобы они использовали новую базу данных.
Поиск неисправностей
В случае больших баз данных выполнение задания может завершиться с ошибкой, если одновременно считывается слишком большой объем данных. Для решения этой проблемы:
Увеличьте значение
maxNumWorkers.
Что дальше?
- Узнайте о запросах к данным с помощью операций конвейера .
- Узнайте, как оптимизировать запросы в Firestore Enterprise Edition.
- Разберитесь, как масштабируется база данных корпоративной версии .