最近工作上需要使用MongoDB数据库,因为之前没有接触过mongoDB数据库,打算在下班时间可以系统的学习一下。买了比较权威的MongoDB权威指南(第二版),以下系列文章内容均为此书的学习笔记。示例也均为本书示例。如果理解有误,请大家多多指正。好了,废话说完了,开始吧!

MongoDB简介:MongoDB是一款强大、灵活,且易于扩展的通用型非关系型数据库。

       1.1 易于使用:首先MongoDB是一个面向文档的数据库,并非关系型数据库。不采用关系模式以获取更好的扩展性等。

                          和关系型数据库相比,MongoDB数据库没有"行"的概念,取而代之的是"文档"模型。通过在文档中嵌入文档和数组,可以表达比较复杂的层次关系。

                                                关系型数据库中存储学生信息和成绩信息 

                                            

mongodb提权 mongodb权威指南_MongoDB

                  

                                 

mongodb提权 mongodb权威指南_服务器_02

 

                                           MongoDB库中存储信息在一个集合(test)中 

                                         

mongodb提权 mongodb权威指南_mongodb提权_03

 上例中可以体现,mongoDB数据库可以存在嵌入文档(message)和数组(like)。可以用一条记录(一个_id对应一条记录) 来表现复杂的层次关系。
       1.2易于扩展: 扩展背景-->随着应用程序数据的不断扩展,开发者面临一个困难:应该如何去扩展数据库?实质是就是纵向扩展和横向扩展之间的选择。

               纵向扩展 使用计算能力更强的机器。优点:省力  缺点:贵,配置高的大型机通常非常昂贵。而且无论配置多高的机器都有物理极限。

               横向扩展  增加存储空间或提高性能。只需购买一台普通的服务器,加入到集群中即可。  优点:易于扩展,相对来说省钱。 缺点:若干机器的集群难以管理。

           此时可能会想,两者都有明显优点和缺点,要如何选择呢?关于这个问题,请看下文

        MongoDB的设计采用横向扩展。面向文档的数据模型使它可以很容易的在多台服务器之间进行数据分割。MongoDB能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。如果集群需要更大的容量,只需要向集群添加新服务器,MongoDB就会自动实现现有数据向新服务器传送。

        看到这儿应该明白了,使用MongoDB数据库处理大量数据时,采用的是横向扩展。通过多台服务器组成集群,至于难以管理的问题,MongoDB集群已经帮我们解决了。省钱,不难以管理的集群,何乐而不为呢?

     1.3丰富的功能: MongoDB除了拥有常用的创建,读取,更新和删除数据外还有一系列不断扩展的独特的功能

           索引-->MongoDB支持通用二级索引,允许多种快速查询,提供唯一索引、复合索引、地理空间索引,以及全文索引

           聚合-->MongoDB支持"聚合管道"。用户能通过简单的片段创建复杂的聚合,并通过数据库自动优化。

          特殊的集合类型 -->MongoDB支持存在时间有限的集合,适用于需要在某个时刻过期的数据,如会话。MongoDB也支持固定大小的集合,可用于保存近期数据,如日志等。

          文件存储-->MongoDB支持一种非常易用的协议,用于存储大文件和文件元数据。

     1.4卓越的性能

           MongoDB的一个主要目标是提供卓越的性能。MongoDB能对文档进行动态填充,也能预分配数据文件以利用额外的空间来换取稳定的性能。MongoDB把尽量多的内存用作缓存,视图为每次查询自动选择正确的索引。