MongoDB设计方法以及技巧示例详解_MongoDB

来源:脚本之家  责任编辑:小易  

这个问题需要考虑的太多首先你的了解关系数据库的设计模式。mongodb的数据模型的设计和关系数据库的有些不同。(原理是一样的)新系统设计和基于原有系统的设计也可能不同你找找看,基本上每本关于mondodb的参考是基本上都有一些介绍不过需要自己总结总结,根据自己的业务具体分析www.zgxue.com防采集请勿采集本网。

前言

MongoDB是一种流行的数据库,可以在不受任何表格schema模式的约束下工作。数据以类似JSON的格式存储,并且可以包含不同类型的数据结构。例如,在同一集合collection 中,我们可以拥有以下两个文档document:

1、如果多的这方,仅仅是一这方会引用,并且所有数据加起来不会超过16M请使用,内嵌数组文档的多余说明:mongodb的基本关联关系也就上面三种,需要更复杂的关联关系使用上面三种方式组合使用。

{ id: '4', name: 'Mark', age: '21', addresses : [ { street: '123 Church St', city: 'Miami', cc: 'USA' }, { street: '123 Mary Av', city: 'Los Angeles', cc: 'USA' } ]}{ id: '15', name: 'Robin', department: 'New Business', example: 'robin@example.com'}

入门 MongoDB背后的公司,10gen推出了免费的10gen Education,这是我看到的最好的在线教程,没有之一。现在已经有好几种在线课程了,课程设计非常用心。拿MongoDB for Developers来说,它在mongo

为了能够充分利用MongoDB的优势,您必须了解并遵循一些基本的数据库设计原则。在讲解设计方法之前,我们必须首先了解MongoDB存储数据的结构。

有效的数据模型是为应用服务的,设计构架的关键问题是文档模型适合使用嵌入式模型(embed)还是使用引用模型(references)。嵌入式数据模型(Embedded Data Models) 在MongoDB中,你可能将相关

一、 数据如何存储在MongoDB中

大数据是指以多元形式,自许多来源搜集而来的庞大数据组,往往具有实时性。在企业对企业销售的情况下,这些数据可能得自社交网络、电子商务网站、顾客来访纪录,还有许多其他来源。这些数据,

与传统的RDBMS关系型数据库不同,MongoDB并没有表Table,行row和列column的概念。它将数据存储在集合collections,文档documents和字段fields中。下图说明了与RDBMS类比的结构之间的关系:

虽然2.6的intersection限制很多,但据我的经验,还是就用原来的数据结构,数组的方法不见得好。给每个字段建索引(password就不用建了吧,我觉得不太会有需求直接查password和排序),然后根据具体

二、数据库设计技巧和窍门

2.1.规范化存储与非规范化存储

因为MongoDB使用文档来存储数据,所以理解“规范化存储“”和“非规范化存储”的概念非常重要。

规范化存储:-规范化意味着将数据存储到多个集合collections中,并在它们之间设计关联关系。数据保存之后,更新数据比较容易。但是在读取数据的时候,规范化存储的缺点就显现出来。如果要从多个集合collections查找数据,则必须执行多个查询,从而使读取数据的速度变慢。 (比如:将网页标题、作者、内容分别存储到不同的collections中)

非规范化存储:-这种方式将若干对象数据,以嵌套的方式存储到单个文档中。它在读取数据的时候表现更好,但在写入时会变慢。这种存储数据的方式还将占用更多空间。 (比如:将网页标题、作者、内容分别存储到同一个collection中)

所以在两种存储数据方式之间进行选择之前,先评估一下你的应用数据库的使用方式。

如果您有一个不需要频繁更新的数据,更新的即时一致性不是很重要,但是在读取时需要良好的性能,那么非规范化可能是明智的选择。(比如:我们博客的博文,作者一旦保存之后,几乎就不在进行频繁的修改,但是面临着读者频繁的读取阅读操作)

如果数据库中的文档数据需要不断的更新,并且您希望在写入时具有良好的性能,那么您可能需要考虑规范化存储。(比如:需要频繁修改数据的业务类系统)

2.2. 一对多关系

与RDBMS相比,在MongoDB中对“一对多”关系建模需要进行更细粒度的设计。许多初学者陷入将文档数组嵌入父文档中的陷阱。正如我们在上文中介绍的,知道何时进行规范化存储或非规范化存储是非常重要的。因此设计者需要考虑关系的基数是“一个对少数几个”还是“一个对多个”?每种关系将具有不同的建模方法。

例如:下面“一个对少数几个”的建模示例。最好的建模方法是在父文档(persopn)中嵌入几个(address):

> db.person.findOne(){ name: 'Mark Kornfield', ssn: '1223-234-75554', addresses : [ { street: '123 Church St', city: 'Miami', cc: 'USA' }, { street: '123 Mary Av', city: 'Los Angeles', cc: 'USA' } ]}

在“一个对多个”示例中,我们将考虑设计两个集合,即产品products集合和零件parts集合。每个零件都有一个“ ObjectID”,该“ ObjectID”将出现在产品集合的引用中。这样的设计可以让读写性能更高效。

> db.parts.findOne(){ _id : ObjectID('AAAA'), partno : '1224-dsdf-2215', name : 'bearing', price: 2.63> db.products.findOne(){ name : 'car', manufacturer : 'Ford', catalog_number: 2234, parts : [ // array of references to Part documents ObjectID('AAAA'), // reference to the bearing above ObjectID('F17C'), // reference to a different Part ObjectID('D2AA'), // etc]

2.3.设计模式可视化

尽管MongoDB是schemaless“无模式的”,但仍然存在将集合collections可视化为图表的方法。能够查看设计图,将对您理解和设计MongoDB的方式上产生重大影响。

DbSchema是可以很好地完成可视化设计工作的一个工具。如下图所示,它将通过读取集合和文档来推导架构。此外,您只需单击就可以修改图中的对象。在DbSchema中,您还可以为MongoDB创建外键,当然仅在本地创建,只用于设计目的。

2.4.智能索引

为了保持数据库的良好性能,有必要建立智能索引,这将简化写入和读取操作。知道MongoDB的索引优势和局限性非常重要,MongoDB保留用于排序操作的内存限制为32MB。如果你不使用索引,则排序时数据库将被迫将所有排序文档hold在内存里面,如果达到32M的限制,则数据库将返回错误或空集。

结论

对MongoDB的透彻理解与对数据库想要实现的目标的清晰了解是良好数据库设计的秘诀。

总结

到此这篇关于MongoDB设计方法以及技巧的文章就介绍到这了,更多相关MongoDB设计方法及技巧内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

推荐一本书《mongoDB 实战》,这个里面讲解了一些关于创建非结构化数据视图的方法和规则技巧内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mysql和mongodb设计实例对比分析
  • mongodb进阶之动态字段设计详解
  • mongodb 数据库的命名、设计规范详解
  • windows7下使用mongodb实现仓储设计
  • mongodb实现问卷/考试设计功能
  • mongodb凭什么跻身数据库排行前五
  • php中mongodb数据库的连接、添加、修改、查询、删除等操作实例
  • mac下安装和配置mongodb的步骤详解
  • mongodb中的mapreduce简介
  • mongodb 游标详解及实例代码
  • mongodb中非常好用的aggregate入门教程
  • mac中mongodb的安装与卸载步骤详解
  • 浅谈mongodb中query查询
  • 在 fedora 上安装 mongodb 服务器的方法教程
  • mongodb中随机获取1条记录的实现方法
  • 如何设计MongoDB数据模型
  • 如何设计MongoDB数据模型
  • 如何用mongodb设计试题库
  • 如何设计mongodb schema
  • mongodb 一对多如何更好设计
  • 怎样学 MongoDB?
  • mongodb 如何设计一个有多级分类的 collection
  • 大型数据MongoDB设计
  • 请教一个mongodb数据结构的设计问题
  • java+mongodb的正确使用方法!
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysql和mongodb设计实例对比分析mongodb进阶之动态字段设计详解mongodb 数据库的命名、设计规范详解windows7下使用mongodb实现仓储设计mongodb实现问卷/考试设计功能mongodb凭什么跻身数据库排行前五php中mongodb数据库的连接、添加、修改、查询、删除等操作实例mac下安装和配置mongodb的步骤详解mongodb中的mapreduce简介mongodb 游标详解及实例代码mongodb中非常好用的aggregate入门教程mac中mongodb的安装与卸载步骤详解浅谈mongodb中query查询在 fedora 上安装 mongodb 服务器的方法教程mongodb中随机获取1条记录的实现方法mongodb常用操作命令大全mongodb各种查询操作详解mongodb数据库插入、更新和删除操mongodb 数据库操作--备份 还原 mongodb插入数据的3种方法mongodb中使用distinct去重的简单mongodb整库备份与还原以及单个cmongodb查询操作限制返回字段的方浅谈mysql和mariadb区别(mariadbmongodb 实现远程连接centos 6.5系统中使用yum安装mongodb 2.6mongodb基本命令实例小结mongodb基础入门之创建、删除集合操作mongodb学习笔记之分组(group)使用示例mongodb最大连接数设置失效的异常分析过程mongodb 随机获取一条记录的方法mongodb 3.2.9开启用户权限认证问题的步骤mongodb 3.6版本中bind_ip设置详解mongodb在windows下的安装步骤分享
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved