Mongodb
定义
非关系型数据库
没有结构这么一说,是集合(数组)对文档(文档) (key => value)
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
关系型数据库与非关系型区别
关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
格式灵活
存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
速度快
nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
高扩展性
成本低
nosql数据库部署简单,基本都是开源软件
配置
MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下 (如: C:\ 或者 D:\ 等 )。
–dbpath 路径切换
启动与关闭
需要在 MongoDB 安装目录的 bin 目录下执行 mongodb 即可。
执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。
你可以使用 MongoDB shell 来连接 MongoDB 服务器。你也可以使用 PHP 来连接 MongoDB。本教程我们会使用 MongoDB shell 来连接 Mongodb 服务,之后的章节我们将会介绍如何通过php 来连接MongoDB服务。
连接
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
mongodb:// 这是固定的格式,必须要指定。
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
portX 可选的指定端口,如果不填,默认为27017
/database 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
标准的连接格式包含了多个选项(options)略
基本命令
数据库
show dbs --查看显示所有数据库
db --显示当前数据库对象或集合
use 数据名 --切换到指定数据库(当第一个文档插入时,集合就会被创建。)
集合
show collections --查看当前数据的集合
createCollection(‘collectionName’)
文档
find()
Insert(‘document’) 别名 save()
update()
remove()
语法顺序
注:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bz2eShRa-1613957242290)(file:///C:\Users\ASUS\AppData\Local\Temp\ksohtml11400\wps1.jpg)]
数据库
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
不能是空字符串("")。
不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
应全部小写。
最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
集合
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
文档(Document)
文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
主键,MongoDB自动将_id字段设置为主键
表连接,MongoDB不支持
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
MongoDB 数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cGapt4H-1613957242291)(file:///C:\Users\ASUS\AppData\Local\Temp\ksohtml11400\wps2.jpg)]
应用
mongodb是一个基于分布式文件储存的数据库,
分布式系统
由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。
分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
数据库mysql和mongdb的区别
SQL:mysql、Oracle、sqlserver、db2
高度事务性场景:银行、会计、贸易,库管,需要大量原子性操作
适合存储结构化数据,如用户的帐号、地址,预先定义明确的字段
数据价值高、对安全性要求高、稳定性要求高
需要持久化存储的 “冷数据”(不需要经常读写的数据)
需要通过SQL语言做关联查询,比如join
6.这些数据的规模、增长的速度通常是可以预期的
NoSQL:
redis key:value(string、hash、set、zset、list)、
mongodb {“name” : “xiaoming”, “age” : 18}, {}
mongodb:字典格式,支持分组、索引、主从备份、集群
灵活的数据结构,适合存储非结构化数据,如文章、评论,需要事先设计 数据的增删改 的字段
高度收缩性场景,社交网络、热点资讯,NoSQL数据库通常具有无限(至少接近)伸缩性
处理 “热数据”(经常需要读写的数据),这些数据通常用于模糊处理,如全文搜索、机器学习
这些数据是海量的,而且增长的速度是难以预期的,更容易扩展
按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差
b {“name” : “xiaoming”, “age” : 18}, {}
mongodb:字典格式,支持分组、索引、主从备份、集群
灵活的数据结构,适合存储非结构化数据,如文章、评论,需要事先设计 数据的增删改 的字段
高度收缩性场景,社交网络、热点资讯,NoSQL数据库通常具有无限(至少接近)伸缩性
处理 “热数据”(经常需要读写的数据),这些数据通常用于模糊处理,如全文搜索、机器学习
这些数据是海量的,而且增长的速度是难以预期的,更容易扩展
按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差
大型互联网项目都会选用MySQL(或任何关系型数据库) + NoSQL的组合方案