转载

MongoDB权威指南第二版学习笔记——MongoDB简介

MongoDB 简介

MongoDB 在功能和复杂性之间取得了很好的平衡,并且大大简化了原先十分复杂的任务,它具备支撑今天主流 web 应用的关键功能:索引、复制、分片、丰富的查询语法,特别灵活的数据模型。与此同时还不牺牲速度。

MongoDB 是一款强大、灵活,且易于扩展的通用型数据库。能扩展出非常多的功能,如二级索引、范围查询、排序、聚合,以及地理空间索引。

设计特点

易于使用

MongoDB 是一个面向文档的数据库,比关系型数据库有更好的扩展性。用文档代替行。能够仅使用一条记录来表现发展的层次关系。

文档的键和值不再是固定的类型和大小。

易于扩展

MongoDB 的设计采用横向扩展。面向文档的数据模型使它能很容易的在多台服务器之间进行数据分割。

MongoDB 能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。如果一个集群需要很大的容量,只需向集群添加新服务器, MongoDB 就会自动将现有数据向新服务器传送。

丰富的功能

MongoDB 作为一款通用型数据库,除了能够增删改查之外,还有一系列不断扩展的独特功能。

索引

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

聚合

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

特殊的集合类型

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

文件存储

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

MongoDB 不具备连接和复杂的多行事务

卓越的性能

MongoDB 能对文档进行动态填充,也能预分配数据文件以利用额外的空间换取稳定的性能。 MongoDB 把尽可能多的内存用作缓存,试图为每次查询自动选择正确的索引。

MongoDB 基础知识

1. 文档是 MongoDB 中数据的基本单元,非常类似 mysql 的行,但更具表现力。

2. 集合可以看作是一个拥有动态模式的表。

3.MongoDB 的一个实例可以拥有多个相互独立的数据库,每一个数据库都拥有自己的集合。

4. 每一个文档都有一个特殊的键“ _id , 在文档所属的集合中是唯一的。

5.MongoDB 自带 js shell ,可用于管理 MongoDB 的实例或数据操作。

文档(类似mysql的行)

文档就是键值对的一个有序集。比如: {“greeting”:”hello world!”,”foo”:3}, 文档的键是字符串。键可以是任意 utf-8 字符。除了少数情况:

  1. 键不能含有 /0( 空字符 ) 。这个字符用于表示键的结尾。
  2. . $ 具有特殊意义,只能在特定环境下使用。

MongoDB 不但区分类型,而且区分大小写, {“foo”: 3 }、{“foo”:” 3 ”}、{“Foo”: 3 } 三个文档是不同的。

MongoDB 的文档不能有重复的键。 {“foo”:” 3 ”,”foo”, 3 } 文档非法。

文档中的键值对是有序的。 {“x”: 1 ,”y”: 2 }与{“y”: 2 ,”x”: 1 } 是不同的。

集合(类似mysql中的表)

集合就是一组文档。

动态模式

集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的。可以放置任何文档,既然如此,为何还要把相关类型的文档组织在一起,使用多个集合,而不是通通放在一个集合里呢?原因如下:

  1. 难以管理
  2. 速度不划算,分开查询多个集合要快得多。
  3. 把同种类型的文档放在一个集合里,数据会更加集中。磁盘寻道操作更少。
  4. 在一个集合中只放入一种类型的文档,可以更加有效地对集合进行索引。

命名

集合使用名称进行标识,可以是任意的 utf-8 字符串,除了以下特殊情况:

  1. 不能是空字符串 (“”)
  2. 不能包含 /0 字符 ( 空字符 ) ,这个字符表示集合名的结束。
  3. 不能以”system.”开头,这是为系统集合保留的前缀。例如:system.users保存着数据库的用户信息,system.namespaces 保存着所有数据库集合的信息。
  4. 不能包含保留字符’$’

子集合

组织集合的一种惯例是使用. ”分隔不同命名空间的子集合。为了使组织结构更清晰,比如( blog.posts blog.authors ), 虽然子集合没有任何特别的属性,但他们却非常有用。使用子集合来组织数据非常高效。

数据库

多个集合可以组成数据库。一个 MongoDB 实例可以承载多个数据库,每个数据库拥有 0 个或多个集合。每个数据库都有独立的权限。不同的数据库放置在不同的文件中。

命名

数据库最终会变成文件系统里的文件,数据库名就是相应的文件名,因此命名会有很多限制。数据库通过名称来标识。 可以是任意的 utf-8 字符串,除了以下特殊情况:

  1.   不能是空字符串 (“”)
  2.   不得含有 / / . ’’ * < > : | ? $( 一个空格 ) /0( 空字符 ) 。基本上,只能使用 ASCII 中的字母和数字。
  3.  区分大小写,为简单起见,应全部小写。
  4.   数据库名最多 64 字节。

保留数据库名

有一些数据库名是保留的,可以直接访问这些有特殊语义的数据库。

admin

从身份验证的角度看,这是root ”数据库。如果将一个用户添加到了 admin 数据库,将自动获得所有数据库的权限。再者,一些特定的服务端命令也只能从 admin 数据库运行,如列出所有数据库或关闭服务器。

local

这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

config

MongoDB 用于分片设置时,分片信息会存储在 config 数据库中。

原文  http://www.cnblogs.com/ginb/p/6155847.html
正文到此结束
Loading...