mongo简介

        MongoDB          

MongoDB是一款强大、灵活、且易于扩展的通用型数据库python

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。mysql

在高负载的状况下,添加更多的节点,能够保证服务器性能。sql

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。数据库

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。数组

光说的话,仍是有点儿模糊,就让咱们来作一个小例子,进行一个对比吧缓存

下面咱们作一张表:mysql的服务器

这是咱们用关系型数据库作的一张很简单的User表对吧session

接下来咱们再看一下MongoDB的数据结构:数据结构

这......这不就是个列表,里面放着三个字典吗?你说的对,若是你理解成了列表和字典,那么证实了你只会Python,在其余语言中它又是别的类型了,咱们把这种类型的玩意儿,叫作:Json架构

那么你就该恍然大悟了吧,MongoDB的每一个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每个字段(Key)咱们称之为:Field

就此咱们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目",Field就是"字段"

     MongoDB的特色      

1. 易用性 

  MongoDB是由C++编写的,是一个基于分布式文件存储的开源数据库系统,它不是关系型数据库。在高负载的状况下,添加更多的节点,能够保证服务器的性能。

MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。
不采用关系型主要是为了得到更好得扩展性。固然还有一些其余好处,与关系数据库相比,面向文档的数据库再也不有“行“(row)
的概念取而代之的是更为灵活的“文档”(document)模型。经过在文档中嵌入文档和数组,面向文档的方法可以仅使用一条记录
来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的见解一致。
另外,再也不有预约义模式(predefined schema):文档的键(key)和值(value)再也不是固定的类型和大小
。因为没有固定的模式,根据须要添加或删除字段变得更容易了。一般因为开发者可以进行快速迭代,因此开发进程得以加快。
并且,实验更容易进行。开发者能尝试大量的数据模型,从中选一个最好的。

 

2. 易扩展性 

  应用程序数据集的大小正在以难以想象的速度增加。随着可用带宽的增加和存储器价格的降低,即便是一个小规模的应用程序,须要存储的数据量也可能大的惊人,甚至超出
了不少数据库的处理能力。过去很是罕见的T级数据,如今已是司空见惯了。
因为须要存储的数据量不断增加,开发者面临一个问题:应该如何扩展数据库,分为纵向扩展和横向扩展,纵向扩展是最省力的作法,但缺点是大型机通常都很是贵,并且
当数据量达到机器的物理极限时,花再多的钱也买不到更强的机器了,此时选择横向扩展更为合适,但横向扩展带来的另一个问题就是须要管理的机器太多。
MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB可以自动处理跨集群的数据和负载,自动从新分配文档,
以及将用户的请求路由到正确的机器上。这样,开发者可以集中精力编写应用程序,而不须要考虑如何扩展的问题。
若是一个集群须要更大的容量,只须要向集群添加新服务器,MongoDB就会自动将现有的数据向新服务器传送

 

3. 丰富的功能

MongoDB做为一款通用型数据库,除了可以建立、读取、更新和删除数据以外,还提供了一系列不断扩展的独特功能
#一、索引
支持通用二级索引,容许多种快速查询,且提供惟一索引、复合索引、地理空间索引、全文索引

#二、聚合
支持聚合管道,用户能经过简单的片断建立复杂的集合,并经过数据库自动优化

#三、特殊的集合类型
支持存在时间有限的集合,适用于那些将在某个时刻过时的数据,如会话session。相似地,MongoDB也支持固定大小的集合
,用于保存近期数据,如日志

#四、文件存储
支持一种很是易用的协议,用于存储大文件和文件元数据。MongoDB并不具有一些在关系型数据库中很广泛的功能,
如连接join和复杂的多行事务。省略
这些的功能是处于架构上的考虑,或者说为了获得更好的扩展性,由于在分布式系统中这两个功能难以高效地实现

 

4. 卓越的性能

MongoDB的一个主要目标是提供卓越的性能,这很大程度上决定了MongoDB的设计。MongoDB把尽量多的内存用做缓存cache,
视图为每次查询自动选择正确的索引。
总之各方面的设计都旨在保持它的高性能
虽然MongoDB很是强大并试图保留关系型数据库的不少特性,但它并不追求具有关系型数据库的全部功能。
只要有可能,数据库服务器就会将处理逻辑交给客户端
。这种精简方式的设计是MongoDB可以实现如此高性能的缘由之一

    MongoDB 的基础知识     

1. 文档是MongoDB的核心概念.

  文档就是键值对的一个有序集合{"msg":"hello","foo":3}.相似于python中的有序字典

须要注意的是:
#一、文档中的键/值对是有序的。
#二、文档中的值不只能够是在双引号里面的字符串,还能够是其余几种数据类型(甚至能够是整个嵌入的文档)。
#三、MongoDB区分类型和大小写。
#四、MongoDB的文档不能有重复的键。
#五、文档中的值能够是多种不一样的数据类型,也能够是一个完整的内嵌文档。文档的键是字符串。除了少数例外状况,键可使用任意UTF-8字符。

文档键命名规范:
#一、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
#二、.和$有特别的意义,只有在特定环境下才能使用。
#三、如下划线"_"开头的键是保留的(不是严格要求的)。

 

 二、集合就是一组文档。

  若是将MongoDB中的一个文档比喻为关系型数据的一行,那么一个集合就是至关于一张表

#一、集合存在于数据库中,一般状况下为了方便管理,不一样格式和类型的数据应该插入到不一样的集合,但其实集合没有固定的结构,
这意味着咱们彻底能够把不一样格式和类型的数据通通插入一个集合中。

#二、组织子集合的方式就是使用“.”,分隔不一样命名空间的子集合。
好比一个具备博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors,这是为了使组织结构更清晰,
这里的blog集合(这个集合甚至不须要存在)跟它的两个子集合没有任何关系。
在MongoDB中,使用子集合来组织数据很是高效,值得推荐

#三、当第一个文档插入时,集合就会被建立。合法的集合名:
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
用户建立的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是由于某些系统生成的集合中包含该字符。
除非你要访问这种系统建立的集合,不然千万不要在名字里出现$。

 

 3. 数据库:在MongoDB中,多个文档组成集合,多个集合能够组成数据库

数据库也经过名字来标识。数据库名能够是知足如下条件的任意UTF-8字符串:
#一、不能是空字符串("")。
#二、不得含有' '(空格)、.、$、/、\和\0 (空字符)。
#三、应所有小写。
#四、最多64字节。

有一些数据库名是保留的,能够直接访问这些有特殊做用的数据库。
#一、admin: 从身份认证的角度讲,这是“root”数据库,若是将一个用户添加到admin数据库,这个用户将自动得到全部数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出全部数据库或关闭服务器
#二、local: 这个数据库永远都不能够复制,且一台服务器上的全部本地集合均可以存储在这个数据库中
#三、config: MongoDB用于分片设置时,分片信息会存储在config数据库

   注意 : 把数据库名添加到集合名前,获得集合的彻底限定名,即命名空间

例如:
若是要使用cms数据库中的blog.posts集合,这个集合的命名空间就是
cms.blog.posts。命名空间的长度不得超过121个字节,且在实际使用中应该小于100个字节

相关文章
相关标签/搜索