将 mongo 集合导出到 SQL Server 的最佳实践

Posted

技术标签:

【中文标题】将 mongo 集合导出到 SQL Server 的最佳实践【英文标题】:Best practices for exporting mongo collections to SQL Server 【发布时间】:2012-02-22 09:05:55 【问题描述】:

我们使用 MongoDB(在 Linux 上)作为我们的主数据库。但是,我们需要定期(例如每晚)将一些集合从 Mongo 导出到 MS SQL 服务器以运行分析。

我正在考虑以下方法:

    使用 mongodump 备份 Mongo 数据库(可能来自副本) 将数据库恢复到安装了 Mongo 的 Windows 机器中 编写一个定制的应用程序,将集合从 Mongo 导入 SQL(可能处理任何所需的规范化)。 在 Windows SQL Server 安装上运行分析。

还有其他“经过验证的”替代方案吗?

谢谢, 斯蒂法诺

编辑:对于第 4 点,分析将在 SQL Server 上运行,而不是 Mongo。

【问题讨论】:

你的步骤听起来不错。另一种选择是在原始机器上导入 mysql,执行 SQL 转储,然后在 windows 机器上导入 SQL(假设它们之间都是标准 SQL)。无论哪种方式都有效,取决于您是希望原始服务器上的 MySQL 还是目标服务器上的 Mongo。 【参考方案1】:

总体看起来不错,但我可以建议两点:

    跳过备份/恢复步骤,直接从 linux mongodb 读取数据,因为随着数据库的增长,备份/恢复数据库会越来越难。 代替定制应用使用Quartz.net 进行夜间导出,它易于使用并且可以解决任何其他计划任务。

我也可以建议研究cqrs and event sourcing 这样的新方法,这基本上可以避免导出任务。您可以实时处理消息并将数据存储到两个数据源(linux mongodb、windows sql server)中,延迟很小,甚至可以从消息中分析数据并存储在 mongodb 中。

【讨论】:

直接从实时实例读取数据会不会损害数据完整性(尤其是如果操作跨越几分钟)?如果在复制过程中数据发生了变化怎么办? @StefanoRicciardi:我看不出在读取数据时如何破坏数据完整性。即使你读了5天。数据在您阅读时发生更改也没关系,无论如何您都会对陈旧的数据进行分析。 事实上,我关心的是目标数据的完整性,而不是源数据的完整性。假设我正在清扫集合 A,其中项目 a 引用集合 B 中的项目 b。同时 b 从源中删除,当我准备复制集合 B 时,项目 b 不再存在。 只是补充一点,这个完整性问题似乎是由 mongodump 通过“--oplog”参数处理的,但我想知道如何通过从服务器实时读取来解决这个问题。 @StefanoRicciardi:我明白了。使用备份/恢复策略,您还可以破坏数据完整性,因为它不会锁定数据库。但是您可以在读取/备份数据时使用db.runCommand(fsync:1,lock:1) 来防止写入。或者最简单的解决方案是停止您的服务器。但我会选择另一种解决方案:如果某些a 项目b 不存在,您可以跳过它而不添加到sql 数据库。

以上是关于将 mongo 集合导出到 SQL Server 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

将数据从MongoDB导入SQL Server

使用Mongo dump 将数据导入到hive

使用rockmongo怎么导出部分数据

将 SQL Server 数据库导出到 sqlite(或 SQL Server Compact)的最佳方式

将数据从 SQL Server 导出到 PostgreSQL

将 Sql Server 2008 数据库导入/导出到 MySQL