Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
【编辑推荐】
- MongoDB数据库入门的5个简单步调
- MongoDB的程度扩大,你做对了吗?
- MongoDB即将宣布文档数据库3.6版,新功能抢先看!
- 大年夜MySQL和MongoDB的比较,看SQL与NoSQL的较劲
- 带你深刻懂得有效的MongoDB索引
关系型数据库已经统治数据存储长达三十几年的时光,即便在 2000 年今后出生了 NoSQL 数据库,但他的出现并没有改变关系型数据的统治地位。跟着比来几年互联网应用的快速崛起,以及互联捕鱼户的赓续增长,数据来源越来越复杂多样,传统关系型数据存储面对了很大年夜的挑衅。这种挑衅表如今数据格决逝世板,修改艰苦,存储不敷灵活,难于扩大等方面。是以,很多企业、公司都先后把数据大年夜关系型迁徙到 NoSQL 上来,个中 MongoDB 又是应用相对较广泛的数据库实现。本文就为大年夜家分享一下关系型数据导入进 MongoDB 中应当遵守的步调和留意的问题。

上图列出了一个项目经由关系型数据向 NoSQL 中迁徙的大年夜致步调,当然这绝对不是一个独一的标准。只是平日情况下的做法,可能会根据不合项目标特别需求有一些调剂。下面我们来具体分析每一个阶段的具体工作内容。
数据模型定义
有可能你会认为奇怪,MongoDB 不是构造无关的 NoSQL 数据库吗?为什愦我们要提到数据库表构造定义。实际上,NoSQL 中的构造是指大年夜技巧层面来讲,数据库对表构造没有强束缚,任何格局的 JSON 都可以插入进 MongoDB 表中。然则,我们在做项目时不克不及随心所欲的在数据库中插入数据,必定要遵守我们本身定义的一套规矩来进行,不然法度榜样根本无法治理数据层面的营业逻辑。在评论辩论表构造之前,先来看一下 MongoDB 中的一些术语和关系型数据库的对应关系。

[SQL to MongoDB Mapping Chart]
看起来很好懂得,在 MongoDB 中我们把表称做Collection,表中每一行的数据称作Document。其他的根本沿用关系型数据库的定名。在 MongoDB 中,所有的数据格局都是以 JSON 为数据库类型,它可以或许比较灵活的存储各类数据库关系。这也是为什么 MongoDB 可以或许在一个 Collection 中存储各类不合构造的数据。比如,你可以插入如许一个 JSON 到 MongoDB 中:{"user": {"name": "Zhang San", }},别的再插入这个 JSON{"product": {"id": "00001"}}。可以看到这两个 JSON 没有任何干系,也没有任何雷同的属性,但在 MongoDB 中都是合法的数据,他们可以同时存在于一个 Collection 中。当然,我们并不鼓励大年夜家如许做,因为如许很难保护你的数据库表格,并且对于萌芽索引来说也很麻烦,会产生很多不须要的索引存储。我们所说的构造灵活指的是在一个构造框架基本上,可以灵活扩充、添加新的数据而不消从新定义数据 Schema。是以,我们在进行数据库迁徙之前须要评论辩论若何定义 Collection 的构造。
MongoDB 将 JSON 存储成一个叫BSON的数据构造中,BSON指的是Binary JSON,二进制 JSON,并在 JSON 的基本上添加了一些新的数据类型,int,float,long。JSON 格局可以灵活的存储嵌入式数据构造,以及数组,如果在关系型数据库中实现其难度是很难想象的。在定义Collection 构造时,须要根据应用法度榜样实际需求找出数据模型的定义,最大年夜程度的应用 MongDB 的存储灵活性。例如,下面是一个典范的两张一对多的数据库表格。
学生表:

成就表:

个中,第一张表是学生表,第二张是学生成就表,一个学生可以有多门课程的成就,是以他们之间是一对多的关系,个中studnet_id在学生表中是主键,对应成就表中的外键。在关系型数据库中这种表示办法完美并精确,然则到了 MongoDB 中也许就是别的一种存储样式了。为了充分应用 JSON 格局的内嵌式存储,我们平日会把这种关系存储到 Collection 中的一笔记录(Document),如下所示:

膳绫擎是对学生 Zhang Scan 的记录存储,可以看出我们把学生成就算作是学生表的内嵌字段,因为是一对多的关系,我们把他存储成一个数组的情势。这种基于 JSON 文档的存储构造有一下几点优势:
- 数据一目了然,当你大年夜数据库中掏出一条学生记录后,关于学生的根本信息全部显示出来。便利大年夜家阅醒浏览。
- 避免了多次数据库表连接操作。在关系型数据库中存在着多种表之间的链接操作,比如阁下连接,内连,外连等等。为了找到关于一个学生的全部信息,我们也许须要进行若干张表的连接才能拿到想要的数据。除了须要写更复杂的 SQL 语句以外,数据库的机能也会受到影响。当数据库进行一次连接操作时,内部可能是须要大年夜磁盘不合地位攫取数据,加大年夜了 IO 操作。反不雅 MongoDB,一次萌芽只须要攫取一次磁盘,大年夜大年夜进步的萌芽效力。
- 删除、修改操作简单便利。如不雅所有相干学生的信息都存储在一张 Collection 中,那么对学生信息的删除和修改只须要在一张表中操作就可以。试想一下在关系型数据库中,如不雅须要删除一个学生记载,有可能须要操作学生表、成就表、宿舍表、等等与学生接洽关系的所有表,如许的设计是困扰关系型数据库开辟人员的一大年夜难题。搞不好数据库中就会存储大年夜量过时、掉效的数据,而这些数据可能成为永远也不会被拜访的逝世角。
推荐阅读
找开源项目可以逛github,碰着编程问题可以在stackoverflow提问。法度榜样员研究进修技巧经常会存眷大年夜神的博客,如云风,刘未鹏,阮一峰。信赖网上经常会推荐给新手段度榜样员这些博客或者网站。不过,>>>详细阅读
本文标题:如何将关系型数据导入MongoDB?
地址:http://www.17bianji.com/lsqh/39056.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示