搜档网
当前位置:搜档网 › Mongodb学习手册

Mongodb学习手册

说明

文档大部分内容来自MongoDB官网网站,仅供学习使用!

目录

MongoDB学习手册 (1)

说明 (2)

一、Mongodb简介 (4)

二、MongoDB特性 (5)

适用场景: (5)

不适用场景: (6)

三、MongoDB的工作方式 (6)

四、MongoDB的下载 (8)

五、MongoDB的安装 (9)

六、MongoDB数据类型 (12)

1. Timestamp类型 (12)

2. ObjectId类型 (12)

3. 数据库关联 (14)

七、GridFS文件系统 (15)

八、索引 (16)

九、主(Master)/从(slave)数据库同步 (20)

1. 建立主/从服务器 (20)

2. 相关参数说明 (21)

3. Slave顶替Master (22)

4. 切换Master/Slave角色 (22)

5. 更新主服务器位置 (22)

十、MongoDB分片和集群 (24)

1. 简单分片实例 (24)

2. 高级分片实例 (29)

十一、数据库基本操作:增查删改 (37)

1. Insert (37)

2. Query (38)

3. Remove (52)

4. Update (53)

十二、Shell控制台 (62)

1. 执行.js文件 (62)

2. –eval (62)

3. 脚本和互动的区别 (62)

十三、安全与认证 (63)

1) 开启安全认证 (63)

2) 添加用户 (64)

3) 认证 (64)

4) 查看用户 (64)

5) 添加普通用户 (64)

6) 添加只读用户 (64)

7) 修改密码 (64)

8) 删除用户 (64)

十四、常用DBA操作 (65)

十五、图形化管理工具 (67)

1.MongoDB的名称取自“humongous”(巨大的) 的中间部分,足见

mongodb的宗旨在处理大量数据上面

2.MongoDB是一个开源的、面向文档存储的数据库,属于Nosql数

据库的一种

3.MongoDB可运行在unix、Windows和OSX平台上,支持32位和

64位应用,并且提供了java、php、c、c++、c#、javaScript多种语言的驱动程序

4.目前正在使用MongoDB的网站和企业已经超过100多家

MongoDB是一个可扩展、高性能的下一代数据库,由C++语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用,存储数据非常方便,主要特性有:

?模式自由,支持动态查询、完全索引,可轻易查询文档中内嵌的

对象及数组

?面向文档存储,易存储对象类型的数据, 包括文档内嵌对象及数

?高效的数据存储,支持二进制数据及大型对象(如照片和视频)

?支持复制和故障恢复;提供了主-从、主-主模式的数据复制及服务

器之间的数据复制

?自动分片以支持云级别的伸缩性,支持水平的数据库集群,可动

态添加额外的服务器

适用场景:

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

◆适合实时的插入,更新与查询,并具备应用程序实时数据存储所

需的复制及高度伸缩性

◆Mongo的BSON数据格式非常适合文档化格式的存储及查询

◆适合由数十或数百台服务器组成的数据库。因为Mongo已经包含

了对MapReduce引擎的内置支持

不适用场景:

◆要求高度事务性的系统

◆传统的商业智能应用

◆复杂的跨文档(表)级联查询

三、MongoDB的工作方式

◆MongoDB是一个介于关系数据库和非关系数据库之间的产品,是

非关系数据库当中功能最丰富并且最像关系型数据库。

◆传统的关系数据库一般由数据库(database)、表(table)、记录(record)

三个层次概念组成,MongoDB同样也是由数据库(database) 、集合(collection)、文档对象(document)三个层次组成。MongoDB里的集合对应于关系型数据库里的表,但是集合中没有列、行和关系的概念,这体现了模式自由的特点。

◆在MongoDB中数据以单文档为单位存储,这样就能在单个数据对

象中表示复杂的关系。文档可以由独立的基本类型属性、内嵌文档或文档数组组成。

◆MongoDB存储的数据格式是key-value对的集合,键是字符串,值可

以是数据类型集合里的任意类型,包括数组和文档对象。这种数据格式称作BSON,即“Binary SerializedDocument Notation”,是一种类似JSON的二进制序列化文档。

◆MongoDB是一个免安装的数据库,将它解压后生成一个bin目录,

其中包含11个工具命令,除此之外不再需要任何其它的二进制依

赖文件。

◆通常情况下启动数据库只需要关注其中的两个命令:mongod和

mongo。前者是MongoDB数据库进程本身,是核心数据库服务器,后者是命令行Shell客户端,其使用方法通常类似于MySQL命令行Shell客户端,用于确保所有内容都已正常安装且能正常运行,并且可以对数据进行CRUD操作、执行管理任务等等。

◆MongoDB使用了内存映射文件进行数据管理,把所有空闲内存当

缓存使用,且不能指定内存大小。这既是优点也是缺点:优点--可以最大限度提升性能;缺点--容易受其它程序干扰。

◆数据空间采用预分配,目的是为了避免形成过多的硬盘碎片。它为

每个数据库分配一系列文件,每个数据文件都会被预分配一个大小,第一个文件名字为“.0 ”,大小为64MB,第二个文件“.1”

为128MB ,依此类推,在32位模式运行时支持的最大文件为2GB。

随着数据量的增加,可以在其数据目录里看到这些不断递增的文件。

◆MongoDB没有自动递增或序列特性,当BSON对象插入到数据库中

时,如果没有提供“_id”字段,数据库会自动生成一个ObjectId对象作为“_id”的值插入到集合中作为该文档的主键(这就避免了其它数据库意外地选择相同的惟一标识符的情况) ,“_id”的值由4字节的时间戳,3字节的机器号,2字节的进程id以及3字节的自增计数组成。当然字段“_id”的值可以手动生成(任意类型都可),只要能够保证惟一性。

◆每个插入的BSON对象大小不能超过4MB,如果超过4M时需使

用GridFS来储存数据。

◆为避免记录删除后的数据的大规模挪动,原记录空间不删除,只

标记“已删除”即可,以后还可以重复利用,所以删除记录不释放空间。

四、MongoDB的下载

1.MongoDB的官网:https://www.sodocs.net/doc/0d7104783.html,/

2.MongoDB的下载地址:https://www.sodocs.net/doc/0d7104783.html,/downloads

如上图,红色标记的是我们用来学习的版本

3.在联网的情况下,也可以通过如下命令来获取安装介质:

五、MongoDB的安装

1.解压安装介质:

2.进入mongo/bin目录,可以看到如下的文件列表:

3.启动mongodb服务进程:

MongoDB默认的数据库文件的位置是/data/db,但是它不会自动的生产目录,所以如果采用默认的文件位置的话,我们需要自己先建立该目录,如下:

接下来可以启动mongodb的服务了:

我们也可以用-dbpath选项来指定自己的数据库位置,如下:

启动成功以后,会有如下界面显示:

4.启动命令常用参数选项说明

mongod 启动数据库进程

--dbpath 指定数据库的目录

--port 指定数据库的端口,默认是27017

--bind_ip 绑定IP

--directoryperdb为每个db创建一个独立子目录

--logpath指定日志存放目录

--logappend指定日志生成方式(追加/覆盖)

--pidfilepath 指定进程文件路径,如果不指定,那么将不产生进程文件

--keyFile 集群模式的关键标识

--cpu 周期性的显示CPU和IO的利用率

--journal 启用日志

--ipv6 启用IPV6支持

--nssize 指定.ns文件的大小,单位MB,默认是16M,最大是2GB --maxConns最大的并发连接数

--notablescan 不允许进行表扫描

--quota 限制每个数据库的文件个数,默认是8个

--quotaFiles 每个数据库的文件个数,配合—quota参数

--noprealloc 关闭数据文件的预分配功能

…………更多的参数选项利用mongod –help 进行查看

5.启动客户端

服务端进程启动成功以后,就可以启动客户端,跟服务端进行连接,如下:

6.关闭mongodb服务

六、MongoDB数据类型

MongoDB除了包含这些string, integer, boolean, double, null, array, and object基本的数据类型外,还包含:date, object id, binary data, regular expression, and code这些附加的数据类型。

1.Timestamp类型

Timestamp类型从1.8版本开始支持,Timestamp有一个特殊的用法:timestamp类型的字段必须是位于文档的前两位.看下面例子:

2.ObjectId类型

在mongodb中,几乎每个文档(除了某些系统的Collection或者某些

Capped Collection)都要求有一个主键:_id,用来唯一标识他们,通常—它的值就是ObjectId类型。当用户往文档中插入一条新记录的时候,如果没有指定_id属性,那么MongoDB会自动生成一个ObjectId类型的值,保存为_id的值。

_id的值可以为任何类型,除了数组,在实际应用中,鼓励用户自己定义_id值,但是要保证它的唯一性。如下有两个方案:

?Sequence Numbers:序列号

传统的数据库中,通常用一个递增的序列来提供主键,在MongoDB 中用ObjectId的来代替,我们可以通过如下的函数来获取主键:

?利用UUID

如果用UUID来提供主键,我们的应用需要自己去生成UUID,考虑到效率,建议把UUID保存为BSON BinData类型,如果用例中对效率要求不是很高,也可以保存为字符串类型。

3.数据库关联

在MongoDB中,通常的关联习惯有两种,一种是简单的手动关联,一种是用DBRef。

?简单的手工关联

//查找

> db.post.save({title:'MongoDB Manual',author:'sam'});

> p = db.post.findOne();

{

"_id" : ObjectId("4de36b33282677bdc555a83a"),

"title" : "MongoDB Manual",

"author" : "sam"

}

//关联

> db.authors.findOne({name:p.author});

{

"_id" : ObjectId("4de36c14282677bdc555a83b"),

"name" : "sam",

"age" : 24,

"email" : "sanlai_lee@https://www.sodocs.net/doc/0d7104783.html,"

}

?利用DBRef关联

DBRef关联语法:

例子:

ObjectId("4b0552b0f0da7d1eb6f126a1") }

> stu = { name : 'Joe', classes : [ new DBRef('courses', x._id) ] }

// or we could write:

// stu = { name : 'Joe', classes :

[ {$ref:'courses',$id:x._id} ] }

> db.students.save(stu)

> stu

{

"name" : "Joe",

"classes" : [

{

"$ref" : "courses",

"$id" :

ObjectId("4b0552b0f0da7d1eb6f126a1")

}

],

"_id" : ObjectId("4b0552e4f0da7d1eb6f126a2")

}

> stu.classes[0]

{ "$ref" : "courses", "$id" :

ObjectId("4b0552b0f0da7d1eb6f126a1") }

> stu.classes[0].fetch()

{ "_id" : ObjectId("4b0552b0f0da7d1eb6f126a1"), "name" : "Biology"

七、GridFS文件系统

由于在MongoDB中,1.7版本之前,BSON对象的大小只有4MB的限制,1.7-1.8版本,大小限制是16MB,将来的版本,这个数值还会提高,不适合存储一些大型文件。但是MongoDB提供了GridFS文件系统,为大型文件的存储提供了解决方案。

八、索引

MongoDB的索引跟传统数据库的索引相似,一般的如果在传统数据库中需要建立索引的字段,在MongoDB中也可以建立索引。MongoDB中_id字段默认已经建立了索引,这个索引特殊,并且不可删除,不过Capped Collections例外。

1.建立索引

建立索引的函数:ensureIndex()

例子:

2.使用索引

a)普通索引

b)嵌入式索引

c)文档式索引

d)组合索引

e)唯一索引

当一个记录被插入到唯一性索引文档时,缺失的字段会以null为默认值被插入文档

例子:

3.查看索引

4.删除索引

a)删除所有索引

b)删除单个索引

c)用运行命令的方式删除索引

5.重建索引

这个操作是个加锁操作,并且如果集合很大,这个操作会很耗时。注:用repair命令修复数据库的时候,会重建索引

九、主(Master)/从(slave)数据库同步

需要启动的两个MongoDB文档数据库,一个是以主模式启动,另一个属于从模式启动。因此,主服务器进程将创建一个local.oplog,将通过这个“交易记录”同步到Slave服务器中。

1.建立主/从服务器

主服务器:132.129.31.213:10111(A)

从服务器:132.129.31.213:10112(B)

启动Master数据库服务器:

启动Slave数据库服务器:5s同步一次

测试同步结果:

//登录master数据库服务器

$ ./mongo -host 132.129.31.213 -port 10111

MongoDB shell version: 1.8.2-rc2

connecting to: 132.129.31.213:10111/test

> use test;

switched to db test

> https://www.sodocs.net/doc/0d7104783.html,er.insert({_id:1,name:'samlee',age:80});

> https://www.sodocs.net/doc/0d7104783.html,er.find();

{ "_id" : 1, "name" : "samlee", "age" : 80 }

>

//登录slave数据库服务器

$ ./mongo -host 132.129.31.213 -port 10112

MongoDB shell version: 1.8.2-rc2

connecting to: 132.129.31.213:10112/test

> use test;

switched to db test

> https://www.sodocs.net/doc/0d7104783.html,er.find();

{ "_id" : 1, "name" : "samlee", "age" : 80 }

相关主题