将 SQL Server 数据库迁移到 MongoDB

Posted

技术标签:

【中文标题】将 SQL Server 数据库迁移到 MongoDB【英文标题】:Migrate SQL Server DB to MongoDB 【发布时间】:2013-09-25 12:40:59 【问题描述】:

我想将 SQL Server DB 的所有特性和功能迁移到 Mongo DB,但我被外键概念卡住了,我知道 NoSQL Dbs 中没有概念外键,但我想连接表并将表存储为如下所示,请分享您的想法和想法如何实现这一目标。我在 SQL Server 中有三个名为 AR_Cities、AR_FlightsAR_FlightAvail 的表我需要迁移并存储到 MongoDB,如何使用外键概念/规范化表结构存储这些数据.

请提出您的想法,

图片网址:-https://i.stack.imgur.com/nezP0.png

【问题讨论】:

【参考方案1】:

最有效的存储方式是将其存储为两个单独的表,将城市信息嵌套到航班中是个坏主意,这可能会导致大量重复信息,从而导致更新等问题的毛球。

与@Maksym 的链接问题不同,我不会说不鼓励规范化,而是鼓励嵌入自包含父数据,例如多对多关系ID。

存储关系的一个好方法是仅使用 ObjectIds 而不是 DBRefs 的更正式版本。因此,例如,一个在途中访问 5 个城市的航班如下所示:


    _id: ObjectId,
    cities: [
        ObjectId(),
        ObjectId(),
        ObjectId(),
        ObjectId(),
        ObjectId()
    ]

当然,您的文档可能看起来有点复杂,因为您可能还需要估计着陆时间和状态(延迟/取消等),但是,这显示了基本概念。在您的申请中,您将获取城市文件的_ids,然后添加到飞行记录中。这样您就可以获得该航班的所有城市,例如:

var d=db.flights.findOne(_id:ObjectId());
var cities=db.cities.find(_id:$in:d.cities);

这将给你你的关系,在一个非常基本的意义上。

关于关系保持,MongoDB 本身没有。 DBRef 不是服务器端解析的关系。这是您必须在您的应用程序中手动处理的事情,但是我认为您不需要在这个系统中进行级联删除等操作,航班会被永久存储,城市数据会被多次重复使用。

因此,该系统实际上只需要查找 JOIN,这在应用程序本身中很容易,使用每个相关记录的延迟加载,对所有关联的城市/航班信息进行范围 $in 查询.

【讨论】:

那么你想让我在没有任何 dbref 的情况下将数据提供到单独的表中吗? @AkshayJoy 是的,使用对象 ID 字段而不是它们更小 我没有得到对象ID的信息,如果你不介意你可以用示例结构编辑答案 你说,我们不需要为这个 MongoDB 表单独的 CityId 对吧。? @AkshayJoy 哦,你会的,我只是说你不应该使用 dbref,所以你有两个集合,有两个单独的 _id,一个是 cityId,另一个是 flightId【参考方案2】:

我也是 MongoDB 的新手,起初我发现很难以面向文档的方式进行思考。当我想到同样的问题时,我做了一些谷歌搜索,发现 Mongo 中有一个 DBRef 的概念。因此,您可以使用它来参考其他文档,尽管它可能会降低性能。顺便说一句,这些问题可能与这个MongoDB normalization, foreign key and joining 重复,所以你也可以在那里找到更多信息。您还可以了解有关 Mongo 数据库参考的更多信息here。

另外请注意,DB 概念不支持像外键这样的完整性,它只是一种引用另一个对象的方式。

希望对你有帮助!

【讨论】:

正如你所说的 DBref 导致性能,但告诉我实现这一目标的有效方法, 最有效的方法是将所有数据存储在文档中,但在这种情况下,您的 AR_Flights 集合中将有多个 AR_Cities 副本,这在您的情况下可能不可接受。所以想想什么对你的项目更重要。此外,如果您真的需要所有这些关系人员,也许您不应该将其迁移到 Mongo 或至少保持原样,让 Mongo 仅用于一些您可以真正从 Mongo 中受益的特定数据

以上是关于将 SQL Server 数据库迁移到 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Azure 迁移到 SQL Server

将索引从 SQL Server 2008 迁移到 SQL Azure

将SQL Server 2008的数据库迁移到SQL Server 2019

将 SQL Server 数据库迁移到 SQL Compact 数据库

将 .DBF 文件迁移到 Sql Server 数据库

如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express