将数据从 SQL 导入 MongoDB。全有或全无

Posted

技术标签:

【中文标题】将数据从 SQL 导入 MongoDB。全有或全无【英文标题】:Import data from SQL to MongoDB. All or nothing 【发布时间】:2016-03-25 09:39:00 【问题描述】:

我有以下架构:

我将数据从 SQL 数据库导入到 mongodb。我使用导入器将数据迁移到通过 API 向网站提供数据的 mongodb。

导入可能需要几分钟,如果失败,我希望能够回滚(能够回滚多个导入会很糟糕)或删除未提交行的数据库/集合(如果您将其视为 SQL 事务)。

我尝试将所有内容导入到事务集合中,该集合在成功后将数据移动到正确的集合中。这需要很长时间才能发挥作用。我还尝试了导入临时数据库然后交换它们的解决方案。但是如果有人遇到问题,例如在 db-copy 之后但在导入完成之前在网站上注册一个新用户(交换时该用户将丢失)。

如何以安全的方式执行导入并且不存在最基本的并发问题?

编辑: 澄清解决方案: 我将在 cron 作业中运行导入程序,至少每天一次。我目前为最新同步保留一个时间戳,并选择比 SQL-db 更新的所有内容。随着时间的推移,事物会自动出现在 SQL-db 中。

在导入结束时,我运行一个下载器,从 SQL 数据库中的 url 下载所有图像。

我不想在下载图像之前开始新的同步,因为这可能会导致奇怪的行为。

【问题讨论】:

您是否有理由必须在导入过程中使用节点?我认为有比 node 更专业的数据迁移工具会是更好的选择; github.com/compose/transporter一人 正如@markthethomas 提到的,很可能有一个专门的工具可以做到这一点。关于回滚,这很复杂,因为 SQL 是基于 ACID 的数据库系统,而 Mongo 是基于 BASE 的数据库系统,因此它们与事务的原子性具有非常不同的特征。小故事是,您需要跟踪写入 Mongo DB 的内容,然后在需要回滚 SQL 事务时触发删除这些文档。 【参考方案1】:

在这种情况下,您需要在非常不同类型的数据库之间移动数据,您将倾向于真正可靠、强大,最重要的是, 主要关注的是传输数据并做好它。 Node.js 很棒,但我强烈建议您找到一些只专注于传输/映射/等的工具。并使用它,无论它使用什么语言/技术。尽管我很喜欢 node.js,但它并没有什么特别推荐它用于这类事情(例如,它的最佳特性不一定使它适合这种传输/迁移)。

最好找一个成熟完善的库来处理这类事情:)

我的研究中出现的一些工具/资源:

mongify SQL to MongoDB Mapping Chart

如果人们可以在 cmets 中提出更多建议会很高兴:)

【讨论】:

我完全同意成熟,发达。您可以查看我的编辑以更好地了解手头的问题。

以上是关于将数据从 SQL 导入 MongoDB。全有或全无的主要内容,如果未能解决你的问题,请参考以下文章

grails 有限的表创建

如何根据 XSD 模式验证 XML 结构的单个条目

InnoDB 引擎的 MySQL 多值插入的内部工作

是否有任何有用的“弱”类型策略实现的实际可能性/示例?

如何从 sql server 将数据导入 mongodb?

如何像调度程序一样将大数据从 MongoDB 导入 SQL Server