在推敲将关系型数据导入到 NoSQL 中时,起首须要确认的几点是:这个导入过程不会是全主动的,并不是像备份数据,迁徙数据,记住几个敕令那么简单;其次,这个过程不是一个纯技巧问题,在制订具体筹划时,项目经理,营业分析人员,开辟人员,数据库治理员都应当介入到筹划的评论辩论中。迁徙的筹划、技巧筹划、各个项目负责人的职责应当在全部人员在场的情况下制订清跋扈;最后,应当推敲到迁徙掉败今后的恢复筹划,根据应用数据的复杂程度不合,迁徙的工作量也不会完全一样。
就像膳绫擎举的例子那样,将关系型数据中表的一行内嵌到与他相接洽关系的表中使之在新的 Collection 中成为一个 Document。这种内嵌的办法实用于两种情况:
- 当表关系是一对一时,或者
- 当表关系是一对多时
内嵌照样引用
膳绫擎是一个将一对多关系的两张表整合到一个 Document 中,实际上我们的数据表构造会复杂很多,一个企业级应用动辄就要设计几百甚至上千张表,表之间会有一对一,一对多,多对多种接洽关系关系。对于如斯复杂的场景今朝我们还没有一个精确的可以应用任何情况的解决筹划。根本上都须要针对营业数据具体分析,大年夜而得出新的数据构造。这里,我可以给大年夜家列出一些根本的原则以及处理不合关系的根本办法,根据这些基来源基本则办法我想大年夜家总可以根据本身的营业归纳出一个行之有效的解决筹划。具体到 MongoDB,有内嵌和饮用两种方法来进行接洽关系,下面我们分布看一下它们应用的场景。
内嵌
在膳绫擎两种关系下,如不雅关系表不经常零丁进行萌芽,它只是依附在主表萌芽的基本长进行,那么我们可以推敲应用内嵌的办法。以产品和产品价格为例解释一下,在记载产品价格时,价格是会跟着时光的变更而取不合的值。一款新上线的产品价格相对较高,跟着时光的推移其价格也会随之降低。在一些类似双十一节假日时代,价格也会临时调剂。在分析产品发卖状况的时刻,我们还要推敲到在什么样的价格下产品销量高,所以不克不及简单的把产品和价格放到一张表中,必定会存在一张与产品相接洽关系的价格表,它记载了产品当前价格以及汗青价格。那么,我们在统计产品的销量报表时,这张价格表不会零丁存在,它必定会依附在产品表之下。此时,将产品价格内嵌到产品表中就是一个比较可行的筹划。萌芽语句可以经由过程一个 Collection 找出所有产品相干价格大年夜而避免了表之间的 JOIN 操作。
然则并不是所有的一对一和一对多的关系都合适应用内嵌的方法。在一下情况下应当慎重应用内嵌数据构造:
- 如不雅一个 Document 的大年夜小跨越了 MongoDB 的限制(16M),此时不该推敲嵌入数据构造。当你的数据表关系很复杂,可能将所有相干的数据内嵌到一个 Document 中会跨越 16M 的限制。
- 如不雅一个 Document 须要经常被拜访,而个中的一个内嵌 Document 很少被拜访到,这时不太合适应用内嵌;因为这会使 MongoDB 在检索数据时增长内存的消费。
- 如不雅一个 Document 中的一个内嵌 Document 须要经常修改,或者大年夜小经常产生变更,而另一个内嵌 Document 相对静态,这是也不要推敲应用内嵌构造。
- 因为内嵌 Document 的增长和削减会导致全部 Document 大年夜小产生变更,当变更跨越了分派给 Document 的磁盘空间时会导致数据库大年夜新为 Document 分派空间。
引用
除了内嵌之外还可以应用引用的方法来接洽关系数据。引用的方法和关系型数据库表的主外键很想。你可以把主表和外键表分别存储成一个 Collection,然后用他们的_id进行接洽关系,_id是 MongoDB 文档一一个比较特别的字段,他会被 MongoDB 主动生成并且独一存在在一个 Collection 中。然则,在应用引用的时刻须要留意一下几点:
预备工作
在一些复杂的多对多关系表中,不要测验测验引用,因为这会加大年夜应用法度榜样逻辑上的开辟和保护。
当应用内嵌构造产生过多反复数据的时刻,可以推敲应用引用。
固然 MongoDB 不支撑 JOIN 操作,然则可以经由过程 Aggregation 中的$lookup指令来完成连接多表的操作请求。
应用集成
有了数据模型的定义,我们就可以开端进行应用集成。集成的办法可以应用 MongoDB 的 Driver,它支撑了几乎常用的各类计算机说话。应用简单和开辟效力高是 MongoDB 的两大年夜特点。于 SQL 语句不合的是,MongoDB 采取了 API 的办法供给接口,开辟人员可以选择支撑本身熟悉说话的 Driver,DBA 可以直接应用 Mongo Shell 脚本。荣幸的是,MongoDB 供给了 API 和 SQL 语句的对比表供大年夜家参考,SQL to MongoDB Mapping Chart。
另一个强大年夜的功能不克不及不提的是 Aggregation Framework(聚合)。并不是所有 NoSQL 数据库都支撑 Aggregation,简单懂得 Aggregation 可以把它当成是 Hadoop 琅绫擎的 Map Reduce,或者 SQL 琅绫擎的 Left Join。在没有 Aggregation 的情况下,开辟人员进行数据迁徙不得一向行如下操作:
- 在应用法度榜样层开辟类似 Aggregation 的功能,将数据聚合在一路并写进数据库。如许做加大年夜了应用法度榜样的复杂度,并且很难适应各类不合数据的组合情况。没碰到一个新的需求都须要进行必定量的开辟工作。
- 有些人会把数据到如今 Hadoop,然后在膳绫擎运行 MapReduce 生成结不雅,之后将结不雅倒进 NoSQL 中。这是一个折中的办法,然则他并不支撑及时数据迁徙,只能进行线下操作。
MongoDB 支撑原生 Aggregation 操作,你可以把须要迁徙的数据进行聚合操作,每一次操作可以想象成一个流水线上的环节,将所有的操作连接起来可以构成一条 Aggregation Pipeline。在 Pipeline 膳绫擎的每一个节点都有本身的输入输出,前一个节点的输出是下一?节点的输入。有兴趣的同窗可以在这个连接上找到更多的关于 Aggregation 操作,它列出了每一个 Aggregation 敕令和 SQL 语句的对应关系,SQL to Aggregation Mapping Chart
推荐阅读
找开源项目可以逛github,碰着编程问题可以在stackoverflow提问。法度榜样员研究进修技巧经常会存眷大年夜神的博客,如云风,刘未鹏,阮一峰。信赖网上经常会推荐给新手段度榜样员这些博客或者网站。不过,>>>详细阅读
本文标题:如何将关系型数据导入MongoDB?
地址:http://www.17bianji.com/lsqh/39056.html
1/2 1

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