`

MongoDB 一些基本概念

阅读更多
MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发。注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储。和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式。这一系列文章,是为入门者写的,已经对NoSQL和MongoDB有一定研究和经验的,可以略过,或者看看如有疏漏,请留言指出。

面向文档,那么什么是文档呢?很明显这不是我们常见的word文档。这里说的文档,是一种可以嵌套的数据集合。从关系数据库的范式的概念来说,嵌套是明显的反范式设计。范式设计的好处是消除了依赖,但是增加了关联,查询需要通过关联两张或者多张表来获得所需要的全部数据,但是更改操作是原子的,只需要修改一个地方即可。反范式则是增加了数据冗余来提升查询性能,但更新操作可能需要更新冗余的多处数据,需要注意一致性的问题。

一个典型的例子,如blog,关系数据库中一般可以把文章设计为一张表,评论设计为一张表,那么在页面需要展示一篇文章和其对应的评论的时候,就需要关联查询文章表和评论表。但是面向文档的设计,可以将评论作为文章的一个嵌套文档存放在一起,这不但省去了关联查询,由于存储在一起,查询的性能也可以做到更好。

MongoDB的面向文档采用的是BSON,一种类似JSON的格式,但是是二进制序列化的。如上面提到的blog的文章和评论,可以做如下设计:

{ 'id':1, 'author':'NinGoo', 'title':'白话MongoDB(一)', 'content':'按照官方的说法,此处省略一万字',
    comment:[ { 'comment-author':'宋兵甲', 'comment-content':'有木有' } ,
              { 'comment-author':'尼玛','comment-content':'伤不起啊' }
            ]
}

1. 相关数据存放在一起,针对性的查询可以消除join,性能比分散存储要高且方便。
2. 整个结构清晰自解析。所有字段名和值都存储,所以不需要提前设计结构,key的名字和数目可以任意指定,也就是所谓的schema-free。
3. 由于字段名在每一行每一列都需要重复存在,会带来一些额外的存储消耗,这在海量数据及字段较多的时候也需要考虑。
4. 一个document的长度有限,1.7.2之前是4MB,目前是8MB,以后可能增长到32MB。如果有更大的数据,可以使用MongoDB底层的GridFS直接作为文件存储。
5. 如果需要查找某个评论者的所有评论,则相对困难。当然,MongoDB支持任意key的索引,这也不是什么大问题。

像上面的一个结构,为一个文档(document),相当于关系数据库中的一行记录,多个文档组成一个集合(collection),相当于关系数据库的表。多个集合(collection),逻辑上组织在一起,就是数据库(database),一个MongoDB实例支持多个数据库(database)。

大部分的NoSQL产品,为追求性能,一致性等,一般只能支持简单的基于row-key的单条或者范围查询,但是MongoDB可以针对任意列的key创建索引,甚至是内嵌文档里的key,从支持的查询的灵活性上来看,更接近传统的关系数据库,同时还能在性能上向NoSQL看齐,加上支持复制,自动分片和Map/Reduce等功能,非常的吸引眼球,正在成为一款热门的海量存储产品。其背后的商业支持公司10gen,也正在不遗余力的推广,前不久还在北京专门组织了一场技术交流会。在其首页列举的典型客户里,包括foursquare,sourceforge,github等知名互联网公司和应用,当然,也包括淘宝网。
3
2
分享到:
评论

相关推荐

    03MongoDB学习基本概念的理解

    03★MongoDB学习★基本概念的理解

    04mongodb基本概念:文档.mp4

    04mongodb基本概念:文档.mp4

    Python操作MongoDB数据库的基本一些操作 .zip

    2、mongoDB的基本概念 (1)数据库: 数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留 (2)集合(table): 在...

    MongoDB基本操作.docx

    ### MongoDB基本操作详解 #### MongoDB简介 MongoDB是一款开源的NoSQL数据库系统,以其灵活性、高性能及可扩展性著称,特别适用于Web应用的开发。MongoDB的数据模型基于文档,这意味着它存储的数据形式类似于JSON...

    mongodb-测试数据

    在深入探讨MongoDB的测试数据之前,我们先来了解一下MongoDB的基本概念。MongoDB使用JSON格式的文档(BSON)作为其数据存储单位,这种格式易于理解和处理,尤其适合处理结构松散或半结构化数据。数据库由集合组成,...

    mongodb资料

    1. **mongodb快速入门-基本操作.doc**:这份文档可能介绍了MongoDB的基本概念,如数据库、集合、文档,以及插入、查询、更新和删除数据的基本命令。 2. **php操作mongodb和mongodb的权限机制.doc**:这个文档应该...

    MongoDB数据库.pdf

    通过上表,我们可以看到MongoDB与SQL的概念对比,了解MongoDB中的基本概念是文档、集合、数据库。 二、MongoDB数据库 MongoDB数据库是一个可以建立多个数据库的数据库系统。默认数据库为"db",该数据库存储在data...

    MongoDB安装包

    下面将详细介绍MongoDB的基本概念、安装过程以及一些关键操作。 首先,MongoDB是一种文档数据库,它存储数据的方式是键值对,这些键值对组合成文档,而文档则组成集合。相比于传统的行式数据库,MongoDB更加适合...

    Java开发面试-MongoDB专区

    在面试中,面试官可能会问到MongoDB的基本概念和特点,例如文档、集合、数据库、索引等,以及与传统关系型数据库的区别和优势。其次,对于Java开发者来说,熟悉MongoDB的Java驱动程序也是必要的。在面试中,可能会...

    koa 分别 连接 mysql、mongodb数据库操作.zip

    2、mongoDB的基本概念 (1)数据库: 数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留 (2)集合(table): 在...

    MongoDB管道的概念.pdf

    首先,聚合管道是MongoDB聚合框架的核心概念,它的工作原理类似于数据处理流水线。每个管道阶段接收一组文档,执行特定的操作,然后传递给下一个阶段,直到所有阶段都完成处理。文档可以在管道中经过多次处理,这...

    MongoDB安装与链接

    MongoDB 是一种流行的开源文档型数据库系统,设计用于处理大量数据并提供高性能、高可用性和自动...通过学习MongoDB的基本概念、安装和连接,开发者可以快速入门并开始利用其强大功能来构建高效的数据驱动应用程序。

    mongodb入门

    本书《mongodb入门》是一本旨在帮助初学者快速学习MongoDB基本用法的入门小书。它适合那些希望在短时间内掌握MongoDB核心概念和操作的读者。作者Karl Seguin是一位拥有丰富技术背景的开发者,其经历跨越多个领域和...

    五、MongoDB 学习PPT

    MongoDB的核心概念包括库(database)、集合(collection)和文档(document)。库是MongoDB中数据的最高级别组织单位,类似于SQL中的数据库。集合是库中的逻辑单元,类似表,但不需要预定义模式,这意味着集合内的...

    MongoDB with F#

    1. **MongoDB 的基本概念** 2. **F# 语言特性及其在 MongoDB 应用中的优势** 3. **使用 C# 驱动器操作 MongoDB 的方法** 4. **利用 F# 的类型系统改进 MongoDB 中字符串泛滥的问题** #### MongoDB 基本概念 MongoDB...

    mongodb安装配置及java操作mongodb

    接着,我们有《MongoDB入门需知(for_phper).doc》,虽然文档标题提到的是PHP开发者,但其中的内容对于理解MongoDB的基本概念和操作是通用的。MongoDB的核心概念包括集合(类似关系数据库的表)、文档(JSON格式的...

    MongoDB参考手册.zip_MongoDB_T6U_mongodb中文手册

    手册首先会介绍MongoDB的基本概念,包括文档(Documents)、集合(Collections)、数据库(Databases)以及其非关系型数据模型。文档是MongoDB中的基本数据结构,类似于JSON对象,由键值对组成。集合是文档的集合,...

    MongoDB_two_MongoDB_

    在深入探讨MongoDB的学习和设计灵魂之前,我们先来理解MongoDB的基本概念和特性。 MongoDB采用NoSQL数据模型,它不同于传统的关系型数据库,如MySQL或Oracle,后者依赖于固定的表结构和行列式数据存储。MongoDB使用...

    基于MySQL、MongoDB、Hbase,包含实用的基本知识 .zip

    2、mongoDB的基本概念 (1)数据库: 数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留 (2)集合(table): 在...

Global site tag (gtag.js) - Google Analytics