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数据库中。

时间: 2024-07-29 09:43:15

MongoDB权威指南第二版学习笔记——MongoDB简介的相关文章

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

数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和false {“x”:true} 数值 shell默认使用64位浮点型数值. {“x”:3.14} 或 {“x”:3} 对于整型值,可使用NumberInt类(表示4字节带符号整数)或NumberLong类(表示8字符带符号整数) {“x”:NumberInt(”3”)} {“x”:NumberLong(

MongoDB权威指南第二版学习笔记(四)—增删改文档下

$slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为10,如果$push 后的数组的元素个数小于10,那么所有元素都会保留.反之,只有最后那10个元素会保留.因此,$slice 可以用来在文档中创建一个队列. db.class.insert({"班级":"1班"}) WriteResult({ "nInsert

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

锋利的jquery第二版学习笔记

jquery系统学习笔记 一.初识:jquery的优势:1.轻量级(压缩后不到30KB)2.强大的选择器(支持css1.css2选择器的全部 css3的大部分 以及一些独创的 加入插件的话还可支持XPath)3.出色的Dom封装(简化原本复杂的操作)4.可靠的事件处理机制(跨浏览器兼容性)5.完善的Ajax操作(一个$.ajax()方法全部搞定)6.不污染顶级变量(只使用了一个名为jQuery的对象 其别名$也可随时让出其控制权 见解决和其它库混用时解决冲突部分)7.出色的浏览器兼容性(优秀的j

[已读]HTML5与CSS3权威指南第二版(下)

去年下半年前公司给买的(老付对我们确实蛮好的),一人挑一本,我当时一定是秀逗了.看的时候就发现,这本书的内容过时严重,即便它是新出不久的第.二.版.其他没什么说的,总之,不推荐看.

irectX 9.0c游戏开发手记之“龙书”第二版学习笔记之10: Chap12: Blending

这一章讲的是Blending,包括alpha 混合和alpha 测试两个方面.这一章的内容总体来说比较简单.然而,后面的习题却并不是很简单-- 下面是习题解答部分: 习题1部分: =============================================================================== 这道题让我们研究使用不同的blend factor和blendop所产生的效果.这个实现起来不难,我就不打算详细解释了,大家都能够看懂的.另外,为了简单,我就不

学习bash第二版 学习笔记 1 —— bash的简介、检测和安装

shell 区别于内核 是一款命令解析程序. Bourne Again shell (BASH), 创建用于GNU项目. GNU项目由Free Software Foundation(FSF)的Richard Stallman 始创,用于创建一个UNIX兼容的操作系统, 并使用该免费的发布版本替代所有的商业UNIX版本. ?? 你可能不能马上用bash.你的系统管理员可能将你的账号设置为使用系统上的 "标准" shell,你甚至不知道有没有其他shell可用. ?? 键入 echo $

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject