it-swarm.com.de

Firestore neue Datenbank - Wie kann ich ein Backup erstellen?

Bietet der Google Firestore-Datenbankdienst eine Sicherung? Wenn ja, wie kann ich die Datenbank sichern und wie stelle ich sie im Fehlerfall wieder her?

25
Gal Bracha

Update: Es ist jetzt möglich, Firebase Firestore mithilfe des von Cloud Firestore verwalteten Export- und Importdienstes zu sichern und wiederherzustellen

Sie machen es durch: 

  1. Erstellen Sie einen Cloud-Speicher-Bucket für Ihr Projekt - Stellen Sie sicher, dass es sich um einen regionalen Bucket-Typ in us-central1 oder 2/multiregional handelt

  2. Richten Sie gcloud für Ihr Projekt mit gcloud config set project [PROJECT_ID] ein.

EXPORT

Exportiere alle durch Aufruf von gcloud alpha firestore export gs://[BUCKET_NAME] Oder Export einer bestimmten Sammlung mit gcloud alpha firestore export gs://[BUCKET_NAME] --collection-ids='[COLLECTION_ID_1]','[COLLECTION_ID_2]'

EINFÜHREN

Importiere alle durch Aufruf von gcloud alpha firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ Dabei zeigen [BUCKET_NAME] und [EXPORT_PREFIX] auf den Speicherort Ihrer Exportdateien. Zum Beispiel - gcloud alpha firestore import gs://exports-bucket/2017-05-25T23:54:39_76544/

Importiere eine bestimmte Sammlung durch Aufruf von: gcloud alpha firestore import --collection-ids='[COLLECTION_ID_1]','[COLLECTION_ID_2]' gs://[BUCKET_NAME]/[EXPORT_PREFIX]/

Vollständige Anweisungen finden Sie hier: https://firebase.google.com/docs/firestore/manage-data/export-import

13
Gal Bracha

Update Juli 2018: Cloud Firestore unterstützt jetzt den verwalteten Import und Export von Daten. Weitere Informationen finden Sie in der Dokumentation:

https://firebase.google.com/docs/firestore/manage-data/export-import


[Googler here] Nein, momentan bieten wir keinen verwalteten Sicherungs- oder Import-/Export-Service an. Das werden wir in Zukunft definitiv anbieten, wir haben es einfach nicht für die erste Beta-Version vorbereitet.

Die beste Möglichkeit zum Sichern ist jetzt, Ihr eigenes Skript mit unseren Java/Python/Node.js/Go-Server-SDKs zu schreiben. Es sollte ziemlich einfach sein, alle Dokumente aus jeder Sammlung herunterzuladen und sie bei Bedarf zurückzuschreiben.

20
Sam Stern

https://www.npmjs.com/package/firestore-backup

Ist ein Werkzeug, das dafür entwickelt wurde.

(Ich habe es nicht erstellt, nur hier hinzugefügt, da die Leute diese Frage finden werden.)

13

Ich verwende die folgende Problemumgehung, um tägliche Firestore-Backups zu erstellen:

Ich habe dies global installiert: https://www.npmjs.com/package/firestore-backup-restore

Ich habe einen Cron-Job, der so aussieht:

0 12 * * *  cd ~/my/backup/script/folder && ./backup-script.sh

Und mein backup-script.sh sieht so aus:

#!/bin/sh

. ~/.bash_profile

export PATH=/usr/local/bin/

dt=$(/bin/date '+%d-%m-%Y %H:%M:%S');
echo "starting backup for $dt"
firestore-backup-restore -a ~/path/to/account/credentials/file.json -B ./backups/"$dt"
5
user3440076

Ich habe ein Tool geschrieben, das die Sammlungen/Dokumente der Datenbank durchläuft und alles in eine einzige Json-Datei exportiert. Außerdem wird dieselbe Struktur importiert (hilfreich beim Klonen/Verschieben von Firestore-Datenbanken). Es wird als NPM-Paket veröffentlicht. Probieren Sie es einfach aus und geben Sie uns Feedback.

https://www.npmjs.com/package/node-firestore-import-export

4
jloosli

Die Frage ist alt, die Projekte sind nett, aber ich habe einige Bedenken hinsichtlich der Sicherung.

1-Für Blaze-Plan-Nutzer (kostenlos) ist die offizielle Lösung tabu.

2-Da Free-Benutzer über eine Lesekontingent von 50.000 pro Tag verfügen, kann dieses Limit in Live-Datenbanken und großen Datenbanken ein Problem darstellen.

3-Soweit ich untersucht habe, sind die meisten Projekte zeitlich unbegrenzt und laden bei jeder Ausführung die gleichen Daten herunter.

4-Wäre es nicht besser, Sammlungen als Ordner und jedes Dokument als separate Datei zu speichern und nur aktualisierte Dokumente abzurufen und die Datei direkt zu ersetzen.

Ich werde wahrscheinlich meine eigene Lösung implementieren, mich aber nur über deine Gedanken wundern :)

0
Warwicky

Hier ist mein Android Java) - Code zum einfachen Sichern für jede Feuerwehrdatenerfassung

Verwenden Sie diese Methode zuerst, um die Erfassungsdaten zu lesen und in einer serialisierten Datei im Speicher des Mobilgeräts zu speichern

private void readCollection(){
        ServerSide.db.collection("Collection_name")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            HashMap alldata = new HashMap();
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                alldata.put(document.getId(),document.getData());
//                                ServerSide.db.collection("A_Sentences_test").document(document.getId())
//                                        .set(document.getData());
                            }
                            try {
                                FileOutputStream fos = openFileOutput("filename.txt", Context.MODE_PRIVATE);
                                ObjectOutputStream os = new ObjectOutputStream(fos);
                                os.writeObject(alldata);
                                os.close();
                                fos.close();
                                Toast.makeText(MainActivity.this, "Stored", Toast.LENGTH_SHORT).show();

                                FileInputStream fis = openFileInput("filename.txt");
                                ObjectInputStream is = new ObjectInputStream(fis);
                                HashMap ad = (HashMap) is.readObject();
                                is.close();
                                fis.close();
                                Log.w("All data",ad+" ");

                            }catch (Exception e){
                                Log.w("errrrrrrrr",e+"");
                            }
                        } else {
                            Log.d("Colllllllllll", "Error getting documents: ", task.getException());
                        }
                    }
                });
    }

Danach können Sie im Logcat überprüfen, ob die Daten korrekt serialisiert sind. Und hier ist der Wiederherstellungscode

private void writeData(){
        try {
            FileInputStream fis = openFileInput("filename.txt");
            ObjectInputStream is = new ObjectInputStream(fis);
            HashMap ad = (HashMap) is.readObject();
            is.close();
            fis.close();
            for (Object s : ad.keySet()){
                ServerSide.db.collection("Collection_name").document(s.toString())
                        .set(ad.get(s));
            }
            Log.w("ddddddddd",ad+" ");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

Hoffe das würde helfen

0
Lasitha Lakmal

Ich hatte das gleiche Problem und habe ein kleines npm-Paket erstellt, mit dem Sie eine geplante Sicherung mit Cloud-Funktionen erstellen können. Es verwendet die neue Import-/Exportfunktion von Firestore.

const firestoreBackup = require('simple-firestore-backup')
exports.firestore_backup = functions.pubsub.schedule('every 24 hours').onRun(firestoreBackup.createBackupHandler())

Testen Sie die vollständige Readme Anleitung zum Einrichten, es ist super einfach!

0
crysxd

Eine Lösung, die Python 2 verwendet.

Gabel es auf https://github.com/RobinManoli/python-firebase-admin-firestore-backup

Installieren und konfigurieren Sie zunächst Firebase Admin Python SDK: https://firebase.google.com/docs/admin/setup

Dann installieren Sie es in Ihrer Python-Umgebung:

pip install firebase-admin

Installieren Sie das Firestore-Modul:

pip install google-cloud-core
pip install google-cloud-firestore

(from ImportError: Fehler beim Importieren der Cloud Firestore-Bibliothek für Python )

Python-Code

# -*- coding: UTF-8 -*-

import firebase_admin
from firebase_admin import credentials, firestore
import json

cred = credentials.Certificate('xxxxx-adminsdk-xxxxx-xxxxxxx.json') # from firebase project settings
default_app = firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://xxxxx.firebaseio.com'
})

db = firebase_admin.firestore.client()

# add your collections manually
collection_names = ['myFirstCollection', 'mySecondCollection']
collections = dict()
dict4json = dict()
n_documents = 0

for collection in collection_names:
    collections[collection] = db.collection(collection).get()
    dict4json[collection] = {}
    for document in collections[collection]:
        docdict = document.to_dict()
        dict4json[collection][document.id] = docdict
        n_documents += 1

jsonfromdict = json.dumps(dict4json)

path_filename = "/mypath/databases/firestore.json"
print "Downloaded %d collections, %d documents and now writing %d json characters to %s" % ( len(collection_names), n_documents, len(jsonfromdict), path_filename )
with open(path_filename, 'w') as the_file:
    the_file.write(jsonfromdict)
0
Robin Manoli