| Актуально для Cloud Firestore Standard Edition и Cloud Firestore Enterprise Edition. |
На этой странице описано, как использовать восстановление на определенный момент времени (PITR) для сохранения и восстановления данных в Cloud Firestore с поддержкой MongoDB.
Чтобы понять концепцию восстановления на определенный момент времени (PITR), см. раздел «Восстановление на определенный момент времени» .
Разрешения
Чтобы получить необходимые разрешения для управления настройками PITR, попросите администратора предоставить вам следующие роли IAM в проекте, где вы хотите включить PITR:
- Владелец облачного хранилища данных (
roles/datastore.owner)
Для пользовательских ролей убедитесь, что предоставлены следующие разрешения:
- Чтобы включить PITR при создании базы данных:
datastore.databases.create - Для обновления настроек PITR в существующей базе данных:
datastore.databases.update,datastore.databases.list - Для чтения данных из PITR:
datastore.databases.get,datastore.entities.get,datastore.entities.list - Для экспорта данных PITR:
datastore.databases.export - Для импорта данных PITR:
datastore.databases.import - Для клонирования базы данных:
datastore.databases.clone
Прежде чем начать
Перед началом использования PITR обратите внимание на следующие моменты:
- После включения функции PITR вы не сможете начать чтение с семидневной давности сразу после включения этой функции.
- Чтобы включить PITR при создании базы данных, необходимо использовать команду
gcloud firestore databases create. Включение PITR при создании базы данных с помощью консоли Google Cloud не поддерживается. - После включения функции PITR (Post-Install Retirement — сохранение версий) Cloud Firestore с совместимостью с MongoDB начинает сохранять версии с момента их создания.
- После отключения функции PITR вы не сможете считывать данные PITR в окне PITR.
- Если вы повторно включите PITR сразу после его отключения, предыдущие данные PITR станут недоступны. Все данные PITR, созданные до отключения PITR, будут удалены после истечения срока действия PITR.
- Если вы случайно удалили данные за последний час, и функция PITR отключена, вы можете восстановить данные, включив PITR в течение часа после удаления.
- Любая операция чтения данных PITR с истекшим сроком действия завершается неудачей.
Включить PITR
Перед использованием PITR включите выставление счетов для вашего проекта Google Cloud . Функциональность PITR доступна только для проектов Google Cloud с включенным выставлением счетов.
Чтобы включить PITR для вашей базы данных:
Консоль
В консоли Google Cloud перейдите на страницу «Базы данных» .
Выберите необходимую базу данных из списка баз данных.
В навигационном меню нажмите «Аварийное восстановление» .
Нажмите «Редактировать» , чтобы изменить настройки.
Установите флажок «Включить восстановление на определенный момент времени» , а затем нажмите «Сохранить» .
Включение PITR влечет за собой расходы на хранение. Дополнительную информацию см. в разделе «Цены» .
Чтобы отключить восстановление на определенный момент времени (PITR), снимите флажок « Включить восстановление на определенный момент времени» на странице «Аварийное восстановление» в консоли Google Cloud.
gcloud
Включите PITR при создании базы данных с помощью команды gcloud firestore databases create и параметра --enable-ptir следующим образом:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=firestore-native\
--enable-pitr
Замените значения следующим образом:
-
LOCATION- место, где вы хотите создать свою базу данных. -
DATABASE_ID- задайте идентификатор базы данных.
Отключить PITR можно с помощью команды gcloud firestore databases update следующим образом:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
Замените значения следующим образом:
-
DATABASE_ID- задайте идентификатор базы данных (по умолчанию).
Получите период хранения и время выхода самой ранней версии.
Консоль
В консоли Google Cloud перейдите на страницу «Базы данных» .
Выберите необходимую базу данных из списка баз данных.
В навигационном меню нажмите «Аварийное восстановление» .
В разделе «Настройки» обратите внимание на период хранения и время выхода самой ранней версии .
- Период хранения : период, в течение которого Cloud Firestore с поддержкой MongoDB сохраняет все версии данных для базы данных. Значение составляет один час, когда функция PITR отключена, и семь дней, когда она включена.
- Время самой ранней версии : самая ранняя метка времени, когда более старые версии данных можно прочитать в окне PITR. Это значение постоянно обновляется Cloud Firestore с совместимостью с MongoDB и устаревает в момент запроса. Если вы используете это значение для восстановления данных, обязательно учитывайте время от момента запроса значения до момента начала восстановления.
- Восстановление на определенный момент времени : отображается
Enabled, если PITR включено. Если PITR отключено, отображаетсяDisabled.
gcloud
Выполните команду `gcloud firestore databases describe` следующим образом:
gcloud firestore databases describe --database=DATABASE_ID
Замените DATABASE_ID на идентификатор базы данных или '(default)' .
Вот результат:
appEngineIntegrationMode: ENABLED
concurrencyMode: PESSIMISTIC
createTime: '2021-03-24T17:02:35.234Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-06-12T16:17:25.222474Z'
etag: IIDayqOevv8CMNTvyNK4uv8C
keyPrefix: s
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
где,
-
earliestVersionTime: метка времени самых ранних сохраненных данных PITR. -
pointInTimeRecoveryEnablement: отображаетPOINT_IN_TIME_RECOVERY_ENABLED, если PITR включен. Если PITR отключен, вы либо увидитеPOINT_IN_TIME_RECOVERY_DISABLED, либо полеpointInTimeRecoveryEnablementможет не отображаться. -
versionRetentionPeriod: период времени в миллисекундах, в течение которого данные PITR сохраняются. Значение может составлять один час, если PITR отключен, или семь дней, если PITR включен.
Прочитайте данные PITR
Вы можете считывать данные PITR, используя клиентские библиотеки, методы REST API или коннектор FirestoreIO Apache Beam.Клиентские библиотеки
Java
Для чтения данных PITR необходимо использовать транзакцию ReadOnly . В операциях чтения нельзя напрямую указывать readTime . Дополнительную информацию см. в разделе «Транзакции и пакетная запись» .
Firestore firestore = …
TransactionOptions options =
TransactionOptions.createReadOnlyOptionsBuilder()
.setReadTime(
com.google.protobuf.Timestamp.newBuilder()
.setSeconds(1684098540L)
.setNanos(0))
.build();
ApiFuture<Void> futureTransaction = firestore.runTransaction(
transaction -> {
// Does a snapshot read document lookup
final DocumentSnapshot documentResult =
transaction.get(documentReference).get();
// Executes a snapshot read query
final QuerySnapshot queryResult =
transaction.get(query).get();
},
options);
// Blocks on transaction to complete
futureTransaction.get();
Узел
Для чтения данных PITR необходимо использовать транзакцию ReadOnly ). В операциях чтения нельзя напрямую указывать readTime . Дополнительную информацию см. в разделе «Транзакции и пакетная запись» .
const documentSnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(documentRef),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
const querySnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(query),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
REST API
Чтение PITR поддерживается всеми методами чтения Cloud Firestore с совместимостью с MongoDB, а именно: get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery и partitionQuery .
Для выполнения операции чтения с использованием методов REST попробуйте один из следующих вариантов:
В запросе метода чтения передайте значение
readTimeв качестве поддерживаемой метки времени PITR в методеreadOptions. Метка времени PITR может быть либо меткой времени с точностью до микросекунды в течение последнего часа, либо меткой времени с точностью до целой минуты после последнего часа, но не раньше, чемearliestVersionTime.Используйте параметр
readTimeвместе с методомBeginTransactionв рамках транзакцииReadOnlytransaction) для множественных операций чтения PITR.
Apache Beam
Используйте коннектор Apache Beam от Cloud Firestore с совместимостью с MongoDB для чтения и записи документов в базу данных Cloud Firestore с совместимостью с MongoDB в больших масштабах с помощью Dataflow.
В следующих методах чтения коннектора Cloud Firestore с MongoDB compatibilityIO поддерживаются операции чтения PITR. Эти методы чтения поддерживают метод withReadTime(@Nullable Instant readTime) , который можно использовать для чтения PITR:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Следующий код можно использовать с примером кода конвейера Dataflow для операций пакетного чтения или записи. В примере используется метод withReadTime(@Nullable Instant readTime) для чтения с мгновенной загрузкой (PITR).
Instant readTime = Instant.ofEpochSecond(1684098540L);
PCollection<Document> documents =
pipeline
.apply(Create.of(collectionId))
.apply(
new FilterDocumentsQuery(
firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
.apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
...
Полный список примеров readTime в конвейере Dataflow можно найти в репозитории GitHub .
Клон из базы данных
Вы можете клонировать существующую базу данных в выбранный момент времени в новую базу данных:
Клонированная база данных — это новая база данных, которая будет создана в том же месте, что и исходная база данных.
Для создания клона Cloud Firestore использует данные восстановления на определенный момент времени (PITR) исходной базы данных. Клонированная база данных включает все данные и индексы.
По умолчанию клонированная база данных будет зашифрована так же, как и исходная база данных, с использованием либо стандартного шифрования Google, либо шифрования CMEK . Вы можете указать другой тип шифрования или использовать другой ключ для шифрования CMEK.
Временная метка имеет точность до одной минуты и указывает на определенный момент времени в прошлом, в периоде, заданном окном PITR :
- Если для вашей базы данных включена функция PITR, выберите любую минуту за последние 7 дней (или меньше, если функция PITR была включена менее 7 дней назад).
- Если функция PITR не включена, вы можете выбрать любую минуту за последний час.
- Вы можете проверить самую раннюю доступную метку времени в описании вашей базы данных .
Консоль
Консоль Firebase не поддерживает клонирование баз данных. Для клонирования баз данных можно использовать инструкции Google Cloud CLI .
gcloud
Для клонирования базы данных используйте команду ` gcloud firestore databases clone :
gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
Замените следующее:
SOURCE_DATABASE : имя существующей базы данных, которую вы хотите клонировать. Имя имеет формат
projects/ PROJECT_ID /databases/ SOURCE_DATABASE_ID.PITR_TIMESTAMP : метка времени PITR в формате RFC 3339 с точностью до минуты. Например:
2025-06-01T10:20:00.00Zили2025-06-01T10:30:00.00-07:00.DESTINATION_DATABASE_ID : идентификатор базы данных для новой клонированной базы данных. Этот идентификатор базы данных не должен быть связан с существующей базой данных.
Пример:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'
Если вы хотите привязаться к определенным тегам при клонировании базы данных, используйте предыдущую команду с флагом --tags , который представляет собой необязательный список пар тегов KEY=VALUE для привязки.
Пример:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2
По умолчанию клонированная база данных будет иметь ту же конфигурацию шифрования, что и исходная база данных. Чтобы изменить конфигурацию шифрования, используйте аргумент --encryption-type :
- (По умолчанию)
use-source-encryption: использовать ту же конфигурацию шифрования, что и для исходной базы данных. -
google-default-encryption: использовать шифрование по умолчанию от Google. -
customer-managed-encryption: использовать шифрование CMEK. Укажите идентификатор ключа в аргументе--kms-key-name.
В следующем примере показано, как настроить шифрование CMEK для клонированной базы данных:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'
Firebase CLI
Для клонирования базы данных используйте команду firebase firestore:databases:clone :
firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'
Замените следующее:
SOURCE_DATABASE : имя существующей базы данных, которую вы хотите клонировать. Имя имеет формат
projects/ PROJECT_ID /databases/ SOURCE_DATABASE_ID.DESTINATION_DATABASE : имя базы данных для новой клонированной базы данных. Имя имеет формат
projects/ PROJECT_ID /databases/ DESTINATION_DATABASE_ID. Это имя базы данных не должно быть связано с существующей базой данных.PITR_TIMESTAMP : метка времени PITR в формате RFC 3339 с точностью до минуты. Например:
2025-06-01T10:20:00.00Zили2025-06-01T10:30:00.00-07:00. Если не указано иное, выбранное значение будет текущим временем, округленным до минуты.
По умолчанию клонированная база данных будет иметь ту же конфигурацию шифрования, что и исходная база данных. Чтобы изменить конфигурацию шифрования, используйте аргумент --encryption-type :
- (По умолчанию)
USE_SOURCE_ENCRYPTION: использовать ту же конфигурацию шифрования, что и в исходной базе данных. -
GOOGLE_DEFAULT_ENCRYPTION: использовать шифрование по умолчанию от Google. -
CUSTOMER_MANAGED_ENCRYPTION: использовать шифрование CMEK. Укажите идентификатор ключа в аргументе--kms-key-name.
В следующем примере показано, как настроить шифрование CMEK для клонированной базы данных:
firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION
Ограничения
Операция клонирования не клонирует данные поиска App Engine или сущности BLOB-объектов из базы данных (default) . Эти данные действительны только для базы данных (default) и не будут полезны при клонировании из базы данных (default) в базу данных, которая не поддерживает такие данные, поэтому они исключаются из клонирования.
Экспорт и импорт данных из PITR
Вы можете экспортировать свою базу данных в Cloud Storage из данных PITR с помощью команды gcloud firestore export . Вы можете экспортировать данные PITR, где временная метка представляет собой целую минуту за последние семь дней, но не раньше, чем earliestVersionTime . Если данные больше не существуют на указанную временную метку, операция экспорта завершится неудачей.
Операция экспорта PITR поддерживает все фильтры, включая экспорт всех документов и экспорт отдельных коллекций.
Экспортируйте базу данных, указав параметр
snapshot-timeравным выбранной метке времени восстановления.gcloud
Выполните следующую команду, чтобы экспортировать базу данных в ваш сегмент.
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDS \ --namespace-ids=NAMESPACE_IDSГде,
-
BUCKET_NAME_PATH— допустимый сегмент Cloud Storage с необязательным префиксом пути, где хранятся файлы экспорта. -
PITR_TIMESTAMP— метка времени PITR с точностью до минуты, например,2023-05-26T10:20:00.00Zили2023-10-19T10:30:00.00-07:00. -
COLLECTION_IDS— список идентификаторов коллекций или групп коллекций, например'specific-collection-group1','specific-collection-group2'. -
NAMESPACE_IDS— список идентификаторов пространств имен, например,'customer','orders'.
Перед экспортом данных PITR обратите внимание на следующие моменты:
- Укажите метку времени в формате RFC 3339. Например,
2023-05-26T10:20:00.00Zили2023-10-19T10:30:00.00-07:00. - Убедитесь, что указанная вами метка времени представляет собой целую минуту за последние семь дней, но не раньше, чем
earliestVersionTime. Если данные на указанную метку времени больше не существуют, будет сгенерирована ошибка. Метка времени должна быть целой минутой, даже если указанное время находится в пределах последнего часа. - За неудачный экспорт PITR с вас не взимается плата.
-
Импорт в базу данных.
Для импорта экспортированной базы данных выполните действия, описанные в разделе «Импорт всех документов» . Если какой-либо документ уже существует в вашей базе данных, он будет перезаписан.