一、的认识
1、什么是?
是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的 数据库。它在轻量级 交换基础之上进行了扩展,即称为 的方式来描述其无结构化的数据类型。
尽管如此它同样可以存储较为复杂的数据类型。它和上一篇文章讲到的Redis有异曲同工之妙。虽然两者均为 ,但是 相对于 而言, 更像是传统的数据库。早些年我们是先有了 (关系型数据库),然后出现了很多很复杂的 ,里面用到了很多嵌套,很多 操作。所以在设计数据库的时候,我们也考虑到了如何应用他们的关系,使得写 可以使 效率达到最高。
后来人们发现,不是每个系统,都需要如此复杂的关系型数据库。有些简单的网站,比如博客,比如社交网站,完全可以斩断数据库之间的一切关系。这样做带来的好处是,设计数据库变得更加简单,写 也变得更加简单。然后, 消耗的时间可能也会变少。因为 简单了,少了许多消耗资源的 操作,速度自然会上去。正如所说的, 简单了,很有以前 可以找到的东西,现在关系没了,通过 找不到了。我们只能将几组数据都抓到本地,然后在本地做 ,所以在这点上可能会消耗很多资源。这里我们可以发现。如何选择数据库,完全取决于你所需要处理的数据的模型,即 。如果它们之间,关系错综复杂,千丝万缕,这个时候 一定是首选。如果他们的关系并不是那么密切,那么, 将会是利器。
和 一样均为 存储系统,它具有以下特点:
面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性
支持 , , , , , , , 及 语言的驱动程序,社区中也提供了对 及 等平台的驱动程序。
文件存储格式为 (一种 的扩展)。
可通过网络访问。
2、与性能比较
像 一样, 提供了丰富的远远超出了简单的键值存储中提供的功能和功能。 具有查询语言,功能强大的辅助索引(包括文本搜索和地理空间),数据分析功能强大的聚合框架等。相比使用关系数据库而言,使用 ,您还可以使用如下表所示的这些功能,跨越更多样化的数据类型和数据规模。
中的许多概念在 中具有相近的类比。本表概述了每个系统中的一些常见概念。
3、应用范围和限制
的主要目标是在 (键/值)存储方式(提供了高性能和高度伸缩性)以及传统的 系统(丰富的功能)架起一座桥梁,集两者的优势于一身。 适用范围如下:
网站数据:非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存:由于性能很高, 也适合作为信息基础设施的缓存层。在系统重启之后,由 搭建的持久化缓存层可以避免下层的数据源过载。
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
高伸缩性的场景:非常适合由数十或数百台服务器组成的数据库。 的路线图中已经包含对 引擎的内置支持。
用于对象及 JSON 数据的存储:的 数据格式非常适合文档化格式的存储及查询。
当然也会有以下场景的限制:
高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
传统的商业智能应用:针对特定问题的 数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
需要 的问题。
二、的安装
环境准备
CentOS7
MongoDB 3.6
安装步骤1、创建一个 文件
在文件中加入如下内容:
退出编辑模式,直接输入如下命令安装即可:
若要安装特定版本的,请分别指定每个组件包并将版本号附加到包名称,如下所示:
你可以指定任何可用的 版本。然而, 会在新版本可用时升级软件包。为防止意外升级,请钉住包装。要固定软件包,请将以下 指令添加到 文件中:
我们直接运行如下命令:
看到如下字样,说明我们安装成功!
我们创建一个,并查看下的安装位置:
安装完成后启动 ,并查看下 启动状态:
如果出现如下字样,说明启动成功!
成功启动后,新建一个命令行输入进行登录操作,即可进行数据库的一些操作了。
三、数据类型及常用命令讲解
的数据类型大致有下列几种:
数据类型
描述
下面我们将介绍一些 的常用命令!
1、创建数据库
:创建一个新的数据库。注意:如果该数据库不存在,则创建,如果该数据库存在,则是切换 如果创建了数据库,没有任何的操作,则会自动删除该数据库
example:
2、查看数据库
:查看当前有多少个数据库
example:
3、创建集合
:向集合里面,添加文档。 里面是 的文档。注意: 里面的集合是隐式创建,就是无需创建,直接使用。 表示显示当前所在的数据库。
example:
4、查看集合
:查看当前数据库中的集合
example:
5、查询集合里面的文档
:查询当前数据库中该集合下的所有文档
example:
:查询当前数据库中该集合下的第一个文档
example:
6、删除集合
:删除当前数据库中的集合
example:
7、删除数据库
:删除当前的数据库
8、帮助命令
:全局帮助命令
:数据库相关的帮助命令
example:
:集合相关的帮助命令
example:
四、增删改查操作
1、添加文档
:向当前数据库的该集合下添加文档
我们在添加文档的时候有如下注意点:
a) 文档就是键值对,数据类型是 格式,支持的值更加丰富。 是 的扩展,新增了诸如日期,浮点等 不支持的数据类型。
b) 在添加的文档里面,都有一个 的键,值为对象类型 ,在这里,我们解释下 类型:
每个文档都有一个 字段,并且同一集合中的 值唯一,该字段可以是任意类型的数据,默认是一个 对象。 对象数据组成:时间戳|机器码|PID|计数器 的键值我们可以自己输入,但是不能重复,但要注意的一点是在插入数据的时候,如果 的值重复则会报错
c) 可以使用 代码来完成批量插入文档
example:
2、删除文档
:删除当前数据库下指定集合中满足条件的文档(不写条件则删除所有的文档)
example:
这里我们在删除 集合中年龄小于6的文档时,我们使用了操作符来完成。
比较运算符
操作符
效果
逻辑运算符
操作符
效果
特别的 $exists: true 表示字段存在
排序 sort
操作
效果
3、更新文档
更新文档有两种方式进行修改
方法一、直接修改
:修改当前数据库下指定集合中满足条件的文档信息
example:
:修改当前数据库下指定集合中满足条件的文档信息
是否新增:如果值是1(true)则没有满足条件的 则添加
是否修改多条:若值是1(true),如果满足条件的有多个文档 则都要修改
example:
方法二、使用修改器
example:
我们要修改 的文档名称为 ,并且其他键值不能丢失
我们可以使用修改器
:加上一个数字
:修改某一个字段,如果该字段不存在就增这个字段
语法:
那如果我们要修改 的文档的年龄增加十岁,我们可以这样做:
4、查询文档
语法:
example:
取出 集合里面的第一个文档
取出 集合里面 的文档
取出 集合里面 的文档
取出 集合里面的文档,只显示 键
根据年龄的(降序|升序)来显示文档
显示 集合中的前三个文档
显示 集合中的第三个文档到第五个文档
统计 集合中文档的个数
五、用户管理(权限控制)
1、权限概述
在 里面的用户是属于数据库的,每个数据库都有自己的管理员。管理员登录后,只能操作所属的数据库。注意:在 的数据库中创建的用户是超级管理员,登陆后可以操作任何的数据库
2、创建用户
(1) 选择数据库
(2) 添加用户
第三个参数"是否只读"默认是 ,创建的用户可以执行读写,如果是 ,则创建的用户只能查询,不能修改。
注意点:在创建用户之前,必须先创建一个超级管理员
example:
3、验证权限(用户登录)
在添加完成管理员之后,我们做如下操作:
(1) 如果你是安装成windows服务的方式安装的,则卸载服务,在安装时添加一个 选项, 表示要开启权限认证
(2) 如果你是直接启动的方式,则停止服务,重新启动,在启动时也要添加 选项, 表示要开启权限认证
如果没有通过权限验证,直接操作数据库,则报如下错误提示:
如何通过权限验证
选择数据库
执行 (用户名,密码)
4、删除用户和修改密码
注意:创建的用户名和密码是存储在各自数据库里面的 集合里面的。想要删除用户,则直接删除 集合里面的文档即可
5、总结说明
a) 非 数据库的用户不能使用数据库命令,比如 等
(b) 数据库中的用户被视为超级用户(即管理员),在认证之后,管理员可以读写所有数据库,执行特定的管理命令。
(c) 在开启安全检查之前,一定要至少有个管理员账户。
(d) 数据库的用户账号以文档的形式存储在 集合里面。可以在 集合中删除用户账号文档,就可以删除用户。
六、MongoDB中的索引
1、普通单列索引
我们用如下代码来测试:
第一、我们先检验一下查询性能
第二、为 创建索引
第三、再执行第一部分代码可以看出有数量级的性能提升
语法: :1是升序,-1是降序
2、多列索引(复合索引)
创建多列索引 语法: 对 和 建立一个复合索引,可以使用 查看创建的索引情况
3、子文档索引
语法: 如下文档可以建立子文档索引
比如要查询 的文档
根据当前案例,我们建立子文档索引
4、唯一索引
语法:
5、查看索引
(1) 查看当前索引状态:
(2) 详情查看本次查询使用哪个索引和查询数据的状态信息:
6、删除索引
删除单个索引:
删除所有索引:
7、重建索引
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此,可以通过索引的重建,减少索引文件碎片,并提高索引的效率,类似 中的 。
里面使用 语法: 表名
语法:
8、索引使用注意事项
(1) 创建索引的时候,注意1是正序创建索引,-1是倒序创建索引
(2) 索引的创建在提高查询性能的同时会影响插入性能,对于经常查询少插入
(3) 复合索引要注意索引的先后顺序
(4) 每个键全建立索引不一定就能提高性能,索引不是万能的。
(5) 在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能。
八、MongoDB中的数据导出与导出
利用mongoexport
-h host主机
-port 端口
-d 指明使用的库
-o 指明要导出的文件名
-csv 指定导出的csv格式
-q 过滤导出
-f field1 field2 列名
-u username 用户名
-p password 密码
注意:在使用用户名和密码是超级管理员的时候,如果端口是默认的可以不使用-port来指定端口
(2) 导入数据
-d 待导入的数据库
-c 待导入的集合(不存在会自己创建)
-type csv/json(默认)
-file 备份文件路径
例如:导入json
导入csv
九、主从复制(读写分离)
主从复制是一个简单的数据库同步备份的集群技术,至少两台数据库服务器,可以分别设置主服务器和从服务器,对主服务器的任何操作都会同步到从服务器上。
C:Users87328DesktopMongoDB主从1
C:Users87328DesktopMongoDB主从2
实现的注意点
1、在数据库集群中要明确的知道谁是主服务器,主服务器只有一台
2、从服务器要知道自己的数据源 也就是对应的主服务是谁
3、--master用来确定主服务器 --slave和--source来控制从服务器
配置步骤
(1) 启动主服务器
(2) 启动从服务器
(3) 客户端登录到主服务器
添加一些数据,测试是否同步到从服务器,在主服务器里面,添加了一些文档:
第一步,客户端登录到主服务器,添加一些文档
第二步,登录到从服务器,查看是否有数据,如果有数据,则成功了!
十、php操作MongoDB
1、安装扩展
注意:扩展文件,下载合适的php_mongodb.dll文件
1) php的版本
2) 是否是线程安全的thread safe(ts)
3) 是vc几的
4) php是32位的还是64位的
步骤
1) 把对应的扩展,拷贝到PHP的安装目录里面的ext目录下面,注意:拷贝后改名为php_mongo.dll,方便管理
2) 打开php.ini文件,引入该扩展
3) 重启Apache,使用phpinfo()函数测试
2、入门使用
1) 连接mongodb服务器
2) 增删改查用法
增删改查
注意,在命令行里面的"." 变成了"->","{}"变成了数组
a) 添加一个文档
b) 查询文档
查询年龄等于9的文档:
查询年龄大于9的文档:
根据年龄降序显示:
c) 修改文档,我们直接使用修改器来完成
把年龄等于8的名称改名为李白:
d) 删除文档
比如删除年龄等于10的文档:
3) 把mysql表里面的数据存储到mongodb里面
以上内容希望帮助到大家,有需要可以添加下方二维码进群交流学习新技术。
如果你想和PHP大神交流加微信,拉你入群
如果你想获得学习资料加微信,送你资源
领取专属 10元无门槛券
私享最新 技术干货