Хранение Firestore экспортирует как версионные файлы против использования метки времени - PullRequest
0 голосов
/ 23 января 2020

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

import { client } from "../firebase-admin-client";
import { getExportCollectionList } from "./helpers";

export async function createFirestoreExport() {
  const bucket = `gs://${process.env.GCLOUD_PROJECT}_backups/firestore`;
  const timestamp = new Date().toISOString();

  try {
    const databaseName = client.databasePath(
      process.env.GCLOUD_PROJECT,
      "(default)"
    );

    const collectionsToBackup = await getExportCollectionList();

    const responses = await client.exportDocuments({
      name: databaseName,
      outputUriPrefix: `${bucket}/${timestamp}`,
      collectionIds: collectionsToBackup
    });

    const response = responses[0];
    console.log(`Successfully scheduled export operation: ${response.name}`);
    return response;
  } catch (err) {
    console.error(err);
    throw new Error(`Export operation failed: ${err.message}`);
  }
}

Это имеет то преимущество, что вы получите список экспорта, каждый из которых имеет свою собственную временную метку. Например, мой скрипт, который импортирует данные в BigQuery, определит последнюю временную метку и загрузит данные оттуда.

У этого подхода есть некоторые недостатки, я думаю. Нет возможности перечислять каталоги в облачном хранилище. Чтобы выяснить последнюю отметку времени, мне нужно получить список всех объектов (то есть всех файлов всех экспортов), а затем split и reduce этих путей, чтобы извлечь список уникальных отметок времени.

При сохранении экспорта данных за месяцы я могу себе представить, что эта операция становится совершенно неэффективной.

Поэтому я думаю о сохранении резервных копий в виде версионных файлов, но у меня нет опыта в этом. Если я правильно понимаю, с версионными файлами я могу экспортировать данные каждый раз в одно и то же место, и (настраиваемые) x версий файлов будут сохраняться в корзине. Затем у вас есть возможность прочитать любую из доступных версий, если это необходимо.

Сценарий импорта bigquery может загружать данные из одного и того же места каждый раз, автоматически получая последние данные экспорта.

Так что, на мой взгляд, это упростит вещи. Есть ли недостатки в использовании версионных файлов для резервного копирования данных? Это рекомендуемый подход?

...