从SQL迁移到MongoDB?

4
我正在研究从SQL 2012迁移数据到mongoDB的可能性。我的经理特别要求我查看处理SQL和MongoDB中数十亿行所需的时间,以决定是否迁移。您有任何建议、建议或需要进一步研究的地方吗?
目前为止我已经完成了以下工作:
  1. 在我的开发环境中安装了MongoDB
  2. 我已经能够连接MongoDB,创建数据库和集合
现在我有以下问题: 3. 如何将SQL中的数据库导入Mongo(例如迁移Adventure Works)。
谢谢!

1
你看过这个Mongify吗? - Elias Nicolas
非常感谢你,Nicolas。它似乎是我目前情况下的正确工具。我会进一步探索并看看它是否适用于我。但是看起来Mongify在Windows上无法使用?对此有什么想法吗,Nicolas? - ebro
怎么会?在哪里说明了? - Elias Nicolas
我之前在做研究,但是我找到了一个解决方案。https://mssql2mongo.codeplex.com/......这个工具帮助我迁移了一个表。现在我准备尝试迁移相关的表格并查看结果。 - ebro
2个回答

5
我已经创建了一个Node.js脚本,可以将SQL数据库复制到MongoDB中。
你可以在这里找到它:https://github.com/ashleydavis/sql-to-mongodb
使用方法如下: 克隆仓库:
git clone https://github.com/ashleydavis/sql-to-mongodb

安装依赖项:

cd sql-to-mongodb
npm install

配置你的设置:

编辑config.js。添加你的SQL连接字符串和MongoDB数据库的详细信息。

运行脚本:

node index.js

这可能需要一些时间才能完成!但是完成后,您将在MongoDB中拥有您的SQL数据库的副本。如果有任何问题,请告诉我。


你好,Ashley!非常感谢你的脚本。sqlConnectionString应该是什么样子的?我尝试了几个,例如: jdbc:mysql://user:pass@localhost:3306/dbname 但总是返回一个错误:"数据库复制出错。TypeError: Invalid server: undefined"。提前感谢你的帮助! - Pierre
连接字符串的样式取决于您使用的数据库,我不知道您正在使用什么。如果是Azure SQL,这里有一些帮助信息:https://learn.microsoft.com/zh-cn/azure/azure-sql/database/troubleshoot-common-errors-issues。另外,我不确定为什么要以“jdbc”为前缀,那是Java的事情,似乎这里不对,但我不确定。如果您无法弄清如何连接到数据库,可以在此网站上发问。祝你好运! - Ashley Davis
谢谢你的回答!这是一个存储在本地环境中的mySQL数据库。在这种情况下,sqlConnectionString应该是什么?在提出公开问题之前,我想再试一次。谢谢! - Pierre
抱歉,我不确定。我几乎没有使用过MySQL。 - Ashley Davis
虽然网络上有很多信息,但你可以尝试谷歌搜索“mysql数据库连接字符串”。 - Ashley Davis

4

我学习编程的时候,总结了一些最佳实践。

进行部分导入

在规划MongoDB集群时,需要了解平均文档大小。为此,导入大约10k条数据。这样可以让你对实际导入所需时间有个大致的了解:

time to migrate

其中t是导入n个c文档所需的时间。

对于所有目标集合都要重复此操作。之后,发出一个

db.stats()

在Mongo shell中。您将看到一些大小统计信息。现在您已经获得了两个关键因素的近似值:导入所需的时间(通过总结上述计算结果)和所需的存储空间。

创建部分导入的索引

创建您需要的索引。与时间计算相同,适用于以上情况。但有一个不同的事情:索引应该驻留在RAM中,因此当所有记录迁移时,您需要推断实际需要的RAM。

很可能没有成本效益将所有数据存储在一台机器上,因为在某一点之后RAM变得昂贵(此处需要进行计算)。如果是这种情况,您需要进行分片。

分片时:选择适当的分片键

无论如何都不能过分强调从一开始就拥有适当的分片键的重要性:无法更改分片键。花些时间与开发者一起找到适当的分片键。

分片时:预分裂块

在数据迁移期间,你最不希望的事情就是负载均衡器试图平衡块而导致延迟。因此,你应该预先拆分块并将它们分配到各个分片中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接