是否可以将数据从Cloud Firestore迁移到另一个NoSQL数据库?

时间:2019-05-04 08:33:31

标签: firebase google-cloud-firestore

我正在启动一个新的Web应用程序,并且我对Cloud Firestore作为主数据库非常感兴趣。 但是在我将时间花在Cloud Firestore之前,我需要一个备份计划。

与其他NoSQL数据库(例如Cassandra和Couchbase)不同,Cloud Firestore仅作为云服务提供。

选择Cloud Firestore意味着您将进入供应商锁定世界。

这是否意味着无法将Cloud Firestore中存储的数据移动到另一个NoSQL Dababase?

我读过here,说从一个Cloud Firestore数据库导出的数据可以导入到另一个Cloud Firestore数据库。 但是我想选择将数据移动到另一个NoSQL数据库。

有可能吗?如果是这样,您能大致解释一下该怎么做吗?

我并没有要求详细说明如何逐步迁移数据。

3 个答案:

答案 0 :(得分:1)

如果两个数据库都具有API,则可以将数据从一个迁移到另一个。但是,鉴于NoSQL数据库的差异,极不可能有任何自动化方法来执行此迁移。而且,由于没有用于NoSQL数据库的标准API,因此您还需要修改应用程序代码以使用新数据库。

“最简单”的迁移类型将是到另一个基于集合/文档的数据库。在这种情况下,只需遍历Firestore中的每个集合,然后在新数据库中重新创建相应的数据结构即可。

答案 1 :(得分:0)

如果要导出文件,然后将其导入另一个仅在非常严格的条件下才是合理的数据库。

  • 首先,两个数据库都必须能够读写相同类型的文件。

  • 第二个数据库必须具有相同的物理实现,或者第二个数据库必须能够从原始转储文件中自动进行ETL

因此,不仅是Cloud Firestore数据库问题,还是目的地问题。

您正在谈论的迁移类型似乎与SQL数据库有关,您可以在其中打开任何转储文件。

您面临的概念性问题是;将数据库用作服务是一种服务。其优点是减少了实施工作时间。例如,您可以在Heroku上移动postgres数据库,但是必须实现服务器。每个服务提供商都会有所不同,因为这是他们的竞争方式,通过采用不同的物理实现,供应商的强项将他们与其他公司区分开。

最后,您始终可以访问数据库。这意味着可以先读取原始数据库,然后将相同内容发布到另一个数据库来完成迁移。此迁移过程必须考虑服务之间的差异。并且应该在可信赖的环境中使用,其中许多服务都提供了可与之一起使用的管理工具。

答案 2 :(得分:0)

好吧伙计们同样的问题。 从firestore迁移到mongodb

的解决方案

1 .npm install @sgg10/firestore-backup

const firestoreBackup = require('@sgg10/firestore-backup');
const serviceAccount = require('./key');

let fsb = new firestoreBackup(serviceAccount, 'https://you data base link here');
// fsb.exportAll().then(result => fsb.saveFile(result, { name: 'All'}));
fsb.exportCustom(['users']).then(result => fsb.saveFile(result, { name: 'users'}));

接下来,我们有 json 文件,所以,解析这个文件并作为一个文档保存到 mongodb

  1. npm install mongodb --save

const { MongoClient } = require('mongodb');
const jsonFile = require('./users.json');

const MONGO_USERNAME = '';
const MONGO_PASSWORD = '';
const MONGO_HOSTNAME = '';
const MONGO_PORT = '27017';
const MONGO_DB = '';
const AUTH_SOURCE = '';

const url = `mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}?authSource=${AUTH_SOURCE}`;
const client = new MongoClient(url, { useUnifiedTopology: true });

const start = async () => {
  await client.connect()
    .then(() => console.log('success'))
    .catch(() => console.log('error'))
}

const saveToDb = () => {
  const database = client.db(MONGO_DB);
  const users = database.collection("users");
  const userKeys = Object.keys(jsonFile.users);
  for (let i = 0; i < userKeys.length; i++) {
    users.insertOne({ _id: userKeys[i], ...jsonFile.users[userKeys[i]] })
  }
}
start().then(() => {
  saveToDb();
})