mongoDB简介

来源:互联网 发布:网络捕鱼代理赚钱吗 编辑:程序博客网 时间:2024/05/21 10:49

文章转自:http://blog.csdn.net/liusong0605/article/details/10548537


mongoDB是非关系型数据库的一种。在进入mongoDB的学习之前,我们先来了解一下非关系型数据库(NoSQL)。

        一、NoSQL的产生

             随着web2.0的兴起,特别是超大规模和高并发的网站对数据库提出了进一步的需求(大数据量引发的一系列问题),而关系型数据库面对这些新的需求,显得有些力不从心,例如:

             1. 面对数据库高并发读写的需求,关系数据库应付上万次sql查询还勉强顶的住,但是应付上万次sql写数据请求,硬盘IO就无法承受了。因为关系型数据库各个数据之间存在关联,为了进行join处理,不得不把数据存储在同一个服务器内,这样不利用数据分散,不具备写扩展性。

             2. 面对海量数据的高效率存储和访问的需求,在一张上万条甚至上亿条记录的表里进行sql查询,效率是极其低下的。关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql语言进行解析,同时还有对表的锁定和解析这样的额外开销。

             3. 面对数据库的高可扩展性和高可用性的需求,因为关系型数据库的存储是建立在关系模型基础上的,当关系模型发生变动时,对于已经存储了大量数据的关系型数据库来说,是非常麻烦的事情。

            在新需求面前,关系数据库遇到了难以克服的障碍,而与此同时,web2.0对关系数据库的很多主要特性却往往要求不那么高,例如:

             1. 对数据库事务一致性的需求,很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。

             2. 对数据库的写实时性和读实时性需求,很多网站并不需要插入数据后立即显示。

             3. 对复杂的SQL查询,特别是多表关联查询的需求,任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,sql的功能被极大的弱化了。

           关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这些问题,非关系型数据库应运而生。


         二、NOSQL优点

            1. 大数据量,高性能

                 NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库结构简单,这样,可以利用通过增加主服务器来实现数据库的读扩展性。而上面也说过了,面对大数据量的写入问题,关系型数据库还是存在压力的。

            2. 灵活的数据模型

               在关系型数据库中,每一张表就是一个关系模式的映射,当关系模型发生改变时,哪怕是很小的变更,都是很麻烦的,甚至还需要停机或者降低服务级别。

               而NoSQL的存储是模式自由的,无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,数据之间可以没有任何格式限制。

            3.  易扩展

               由于NoSQL数据库所存储数据之间的无关系性,使数据库易于扩展,而且,在架构的层面上也带来了可扩展的能力。


          三、NoSQL与关系型数据库设计理念的比较

              关系型数据库是建立在关系模型基础上的,借助于集合代数等数学概念和方法来处理数据库中的数据。其中每一张表就是一个关系模式的映射,每条记录字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库也会为每条记录分配所有的字段。这样的结构便于表与表之间的关联。

              NoSQL数据库是模式自由的,存储的数据不局限于固定的结构,数据之间可以没有任何关系。这样的结构显得更加灵活,也减少了一些时间和空间的开销。

 

           四、总结

             NoSQL数据库的出现,弥补了关系型数据库在某些方面的不足,但从功能上讲,NoSQL的几乎所有功能,在关系数据库上都能满足,所以,选择NoSQL的原因并不在功能上,而是二者都有各自的特点和应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路,让关系型数据库关注在关系上,非关系型数据关注在存储上。



      一、简介

      mongoDB是一个开源的,基于分布式的,面向文档存储的非关系型数据库。是非关系型数据库当中功能最丰富、最像关系数据库的。

      mongoDB由C++编写,其名字来源于"humongous"这个单词,其宗旨在于处理大量数据。

      mongoDB可以运行在Windows、unix、OSX、Solaris系统上,支持32位和64位应用,提供多种编程语言的驱动程序。

      mongoDB支持的数据结构非常松散,是类似json的BSON格式,通过键值对的形式存储数据,可以存储复杂的数据类型。

      mongoDB支持的数据类型有:null、boolean、String、objectId、32位整数、64位整数、64位浮点数、日期、正则表达式、js代码、二进制数据、数组、内嵌文档、最大值、最小值、未定义类型。

      其中,内嵌文档我理解的并不是.doc.txt等文件,这里所指的文档是mongoDB的一个存储单元(相当于关系型数据当中的记录),在mongoDB中的表现形式为{key1:value1,key2:value2},而内嵌文档则是这样的形式{key1:value1,key2:{key2.1:value2.1,key2.2:value2.2}}。

      mongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

      二、mongoDB的特性:

       1. 面向集合存储。数据被分组到若干集合,每个集合可以包含无限个文档,可以将集合想象成RDBMS的表,区别是集合不需要进行模式定义。

       2. 模式自由。集合中没有行和列的概念,每个文档可以有不同的key,key的值不要求一致的数据类型。

       3. 支持动态查询。mongoDB支持丰富的查询表达式,查询指令使用json形式表达式。

       4. 完整的索引支持。mongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。

       5. 高效的数据存储,支持二进制数据及大型对象(图片、视频等)。

       6. 支持复制和故障恢复。

       7. 自动分片以支持云级别的伸缩性,支持水平的数据库集群,可动态添加额外的服务器。

     三、 mongoDB的适用场景:

       1.  适合作为信息基础设施的持久化缓存层

        2. 适合实时的插入、更新与查询,并具备应用程序实时数据存储所需的复制及高度伸缩性

        3. 适合文档化格式的存储及查询

        4. 适合由数十或数百台服务器组成的数据库

      四、mongoDB不适用场景:

         1. 要求高度事务性的系统。例如对于银行或会计等需要大量原子性复杂事物的应用程序来说,还是需要关系型数据库的。

         2. 传统的商业智能应用

         3. 复杂的表级联查询


0 0