2012-02-22 24 views
6

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

我想到了以下方法:

  1. 备份Mongo的数据库(可能从副本)使用mongodump
  2. 将数据库恢复到Windows机器,其中蒙戈是istalled
  3. 编写自定义使应用程序从Mongo中导入集合到SQL中(可能处理任何所需的规范化)。
  4. 在Windows SQL Server安装上运行分析。

还有没有其他的“试过,真的”的替代品?

感谢, 斯特凡诺

编辑:对于4点,分析应SQL服务器,而不是蒙戈上运行。

+1

你的脚步听起来很好。另一种方法是在原始机器上导入到MySQL,执行SQL转储,然后在Windows机器上导入SQL(假设它们之间都是标准SQL)。无论哪种方式都有效,取决于您希望在原始服务器上使用MySQL还是在目标服务器上使用Mongo。 – 2012-02-22 09:11:11

回答

3

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

  1. 跳过备份/恢复步骤,直接从Linux的MongoDB中读取数据,因为这将是越来越难备份/恢复数据库,因为它会增加。
  2. 而不是定制的应用程序使用Quartz.net夜间出口,它很容易使用,并可以解决任何其他日程安排任务。

此外,我可以建议看看cqrs and event sourcing这样的新方法,这基本上可以避免出口任务。您只需处理消息并将数据存储到两个数据源(linux mongodb,windows sql server)中即可实现小延迟,甚至可以分析消息中的数据并存储到mongodb中。

+0

直接从活动实例中读取数据可能会损害数据完整性(特别是如果操作跨越几分钟),是不是有可能?如果拷贝过程中数据发生了变化,该怎么办? – 2012-02-22 10:00:07

+0

@StefanoRicciardi:我看不出在读取数据时如何破坏数据完整性。即使你读了5天。在阅读数据时发生变化是可以的,无论如何,您都会对陈旧的数据运行分析。 – 2012-02-22 11:23:43

+0

事实上,我关心的是_target_数据的完整性,而不是来源。假设我正在清理集合A,其中一个项目引用了集合B中的一个项目b。同时b从源代码中删除,当我准备好复制集合B时,项目b不再存在。 – 2012-02-22 14:01:34