1、简单介绍
分布式文件存储非关系性数据库
为WEB程序提供可扩展的高性能的数据存储解决方案
内存级读写,提高数据库性能
考点
mongodb的优点:
面向文件、
高性能、
高可用、
高扩展、
丰富的查询语言
简单介绍mongodb:,首先它是一个优秀的非关系型数据库,面向文档,由C++编写而成。与SQL语法不同,自己维护一套功能强大的查询语法。使用BSON作为数据存储和传输,BSON是一种类似与JSON的数据格式。
什么时候选用mongodb:
a) 网站数据:mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
b) 缓存:由于性能很高,mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由 mongo 搭建的持久化缓存可以避免下层的数据源过载。
c) 大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
d) 高伸缩性的场景:mongo 非常适合由数十或者数百台服务器组成的数据库。
e) 用于对象及 JSON 数据的存储:mongo 的 BSON 数据格式非常适合文档格式化的存储及查询。
f) 重要数据:mysql,一般数据:mongodb,临时数据:memcache
g) 对于关系数据表而言,mongodb 是提供了一个更快速的视图 view;而对于 PHP 程序而言,mongodb 可以作为一个持久化的数组来使用,并且这个持久化的数组还可以支持排序、条件、限制等功能。
h) 将mongodb代替mysql的部分功能,主要一个思考点就是:把mongodb当作mysql的一个view(视图),view 是将表数据整合成业务数据的关键。比如说对原始数据进行报表,那么就要先把原始数据统计后生成 view,在对 view 进行查询和报表
不适用的场景
a) 高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
b) 传统的商业智能应用:针对特定问题的 BI 数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
c) 需要 SQL 的问题
d) 重要数据,关系数据
优点:
1)弱一致性(最终一致),更能保证用户的访问速度
2)文档结构的存储方式,能够更便捷的获取数
3)内置 GridFS,高效存储二进制大对象 (比如照片和视频)
4)支持复制集、主备、互为主备、自动分片等特性
5)动态查询
6)全索引支持,扩展到内部对象和内嵌数组
缺点: 1)不支持事务
2)MongoDB 占用空间过大,维护工具不够成熟
2、与MYSQL的区别
常用命令区别
MySQL 的常见命令如下:
1. create database name; 创建数据库
2. use databasename; 选择数据库
3. drop database name 直接删除数据库,不提醒
4. show tables; 显示表
5. describe tablename; 表的详细描述
6. select 中加上 distinct 去除重复字段
7. mysqladmin drop databasename 删除数据库前,有提示。
8. 显示当前 mysql 版本和当前日期
9. select version(),current_date;
MongoDB 的常见命令如下:
1. db.help(); Help 查看命令提示
2. use yourDB; 切换/创建数据库
3. show dbs; 查询所有数据库
4. db.dropDatabase(); 删除当前使用数据库
5. db.getName(); 查看当前使用的数据库
6. db.version(); 当前 db 版本
7. db.addUser("name"); 添加用户
8. db.addUser("userName", "pwd123", true);
9. show users; 显示当前所有用户
10. db.removeUser("userName"); 删除用户
11.db.yourColl.count(); 查询当前集合的数据条数
常用概念区别
一些基本知识介绍
3、基本操作之常用基本命令
(1)数据库操作
查看所有数据库 : show dbs
切换、创建一个数据库:use dbs
删除一个数据库:db.dropDatabase()
(2)集合【表】操作
【注】当设置了size之后,添加的数据超过此大小会覆盖就得数据
查看与删除
4、数据操作
数据类型简单介绍
objectID介绍
数据操作【增删改查】
查询
更新
语法:db.cname.update({},{},{})
{}1::查询条件,若查询条件为空表示匹配整个文件,就是所有行
{}2:更新内容,若不配置了$set表示修改整个文档(一行),文档结构会被破坏;若增加$set,即$set作为key值,更新内容作为value值,表示修改文档中的部分内容。一般指定属性进行更新需要加$set,属性指的是key和value的组合
{}3:不配置,没有该项表示修改匹配到的第一行;若配置muti:true表示修改匹配到的多行。但是匹配多行的话必须要加$set才会生效,因此多行匹配的时候加了$set默认是不修改文档结构的
【注】可以看到后面配置写错是不会报错的
保存
【注】一般用不到,需要注意的一点是若数据存在进行的是修改操作,若数据不存在进行的是添加操作
删除
删除匹配到的一行
5、查询详解
基本查询
查询操作
格式化的意思是
运算符
当前数据
查询年纪大于17的
所有运算符也要构造成json格式
逻辑运算符【与或】
逻辑与多个条件之间用逗号隔开格式是[条件1,条件2.......条件n],每个条件都必须是键值对的形式
逻辑或要使用$or,语法格式是{$for:[{条件1},{条件2}.......{条件n}]}
与和或一起使用{$for:[{条件1},{条件2}.......{条件n}],与的条件1,与的条件n}
范围运算符
操作如下
支持正则
这里的正则表达式沿用了JS的语法,如何使用呢使用//【正则表达式】或者$regex【正则对象】
自定义查询
【注】函数编写语法沿用JS,定义的函数需要返回一个布尔类型的值
分页查询
limit用于读取指定数量的文档
skip表示跳过几条数据
两者结合实现分页功能
比如获取第n页数据,每页m条数据
db.tableName.find().skip((n-1)*m).limit(m)
显示部分数据之投影
操作如下
排序
指定字段进行排序
【注】不加sort的话默认是根据objectID进行排序
统计返回的文档个数【统计行数】
操作如下
消除重复行
6、聚合
与MYSQL中聚合概念一样也是为了统计数据,语法是[{管道:{表达式}}],聚合用的是列表,列表中每个值都是个字典。字典的键值是管道,value值是字典表达式
常用管道有group、match等
常用表达式,这个很多与MYSQL中的聚合函数作用一样
下来我们详细介绍一下每个管道和表达式
group
group类似与MYSQL中的group py,使用中key值是$group,value值的构成需要注意的是字典中需要配置_id表示使用哪个字段的值进行聚合,字段前面要加$符号。最后count是个随便取的,用来接收聚合的结果,并最后显示结果
所有表达式,用法同上
其中first和last分别取聚合结果的第一行和最后一行数据
push会把有差异的结果【age字段】放到一个列表中,若想显示整个文档【即显示一行】操作如下:
$match用于执行过滤,在MYSQL中相当于where后面加过滤条件,然后再进行聚合
$project作用是用来显示聚合结果的部分内容
$sort对结果集基于给定的字段进行排序,相当于MYSQL中的排序函数
limit和skip,相当于MYSQL分页的那两个函数
unwind将数组类型的字段拆分成多条
【注】拆分字符串类型的数据会报错
其他用法
7、索引
准备工作创建多个数据
未建立索引之前利用内置工具计算查询时间
重点来了基于name创建索引
语法:
其他索引操作
操作:
查看索引
建立索引后执行查询语句,并查看时间
一般建立索引要基于find查询语句,如本文中是根据name查询,所以将他作为索引
8、安全
实际项目中我们经常使用的是普通用户,首先创建系统管理员。然后登陆系统管理员创建普通用户。普通用户只有操作授权的数据库的权限,而系统管理员能看到所有数据库的内容
启动安全认证
总结
9、复制
简单介绍
复制的工作原理和特点
备份与恢复
备份:手动完成数据库的备份
恢复