Я пытаюсь найти решение для этой проблемы уже пару дней. Я хочу делать резервные копии своих данных из базы данных в реальном времени чаще, чем то, что предоставляет Firebase, т.е. раз в 24 часа. Я сделал то же самое с моим FireStore, развернул приложение и задание cron для резервного копирования каждые 8 часов и сохранения этого в моем хранилище GS. Но я не смог найти ничего похожего для базы данных в реальном времени.
Вот что я попробовал -
Я использую функции Firebase здесь (я добавлю работу cron позже) , Что я делаю, так это выбираю каждого дочернего узла моего root базы данных и заархивирую его с помощью zlib. Вот как выглядит мой код -
const functions = require('firebase-functions');
const admin = require("firebase-admin");
const cors = require('cors')({origin: true});
const zlib = require('zlib');
exports.backup = functions.https.onRequest((request, response) => {
cors(request, response, async () => {
const db = admin.database();
const ref_deb = db.ref("/");
ref_deb.once('value').then(function (snapshot) {
console.log("Database value " + snapshot.val());
let jsonFileContent = snapshot.val();
if (jsonFileContent != null) {
//console.log(io);
console.log("getCompressedJSONFile function started", jsonFileContent);
let bufferObject = new Buffer.from(JSON.stringify(jsonFileContent));
zlib.gzip(bufferObject, function (err, zippedData) {
if (err) {
console.log("error in gzip compression using zlib module", err);
response.send("Error").status(500);
} else {
console.log("zippedData", zippedData);
response.send(zippedData).status(200);
}
})
} else {
response.send("Error").status(500)
}
}, function (error) {
console.error(error);
});
});
});
Я получаю ответ (явно закодированный и не читаемый)
Теперь я хочу загрузить его в мое ведро GS . Как я могу это сделать? Можно ли сделать это, передав zippedContents из zlib без создания файла? Будем благодарны за любую помощь.
В моей базе данных меньше 0,5 МБ несжатого файла, поэтому резервное копирование всего сразу не должно быть проблемой.