一、Nosql以及MongoDB
NoSQL就是为了解决在web2.0时代,出现的三高要求。
对数据库高并发读写的需求
对海量数据的高效率存储和访问的需求
对数据库的高可拓展性和高可用性的需求
数据库的一致性
数据库的实时读写
复杂的SQL查询,特别是多表关联查询
NoSQL的优点
拓展简单方便,尤其是水平横向拓展(纵向拓展是指使用更强的机器,横向拓展是指把数据分散到多个机器)
读写快速高雄啊,多数都会映射到内存操作(如Redis等)
成本低廉,用普通机器,分布式集群即可
NoSQL的缺点
不支持对SQL的支持
现有产品还不够成熟稳定,功能还有待加强
MondoDB的特点
1.高性能,易于使用,易于拓展,功能丰富
2.面向集合存储,模式自由
3.支持动态查询,支持javascript表达式查询
4.支持索引
5.支持副本集复制和自动故障恢复
6.支持二进制和大型对象数据
7.文件存储格式为BSON
二、MongoDB的文档存储机制
将文档插入到MongoDB的时候,文档是按照插入的顺序,依次在磁盘上相邻保存在磁盘上。
因此,一个文档变大了,原来的位置如果放不下这个文档了,就需要把这个文档移动到集合的另外一个位置,通常是最后能放下这个文档的地方。 这样频繁的移动文档的效率是非常低的。
MongoDB移动文档的时候,会自动修改集合的填充因子(padding factor),填充因子是为新文档预留的增长空间,不能手动设定填充因子。
1.填充因子开始可能是1,也就是为每个文档分配精确地空间,不预留增长空间
2.当有文档超长而被迫移动文档的时候,填充因子会增大
3.当集合中不再有文档移动的时候,填充因子会慢慢减小
MongoDB进行文档移动是非常慢的。所以在设计的时候尽量避免文档的移动操作。
如某个字段的增长是预期的,如成绩可能最多8门课。我们可以预留一些空间,插入一些占位符,多插入一些无效的字段。
mongodb文档数据库,存储的是文档(Bson->json的二进制化)
特点:mongodb的内部引擎使用JS解析器,把文档存储成bson结构,在查询时,转换成JS对象,并可以通过我们熟悉的JS语法来操作
三、MongoDB的安装与启动
1、安装
官网:https://www.mongodb.com/download-center#community
官网上下载linux版本即可。已经编译了的,本身就是编译后的二进制可执行文件
解压xxx.tar.gz
进入xxx/bin
- bsondump :导出bson结构
- install_compass
- mongo :客户端(相当于mysql.exe)
- mongod :服务端(相当于mysqld.exe)
- mongodump :整体数据库导出(二进制,相当于mysqldump)
- mongoexport :导出易识别的json文件或csv文档
- mongofiles
- mongoimport
- mongoperf
- mongoreplay
- mongorestore :数据库整体导入
- mongos :路由器(分片时用)
- mongostat :运维时需要观察mongodb的运行状态
- mongotop
2、MongoDB的启动,关闭
1)启动
a.以参数的方式启动
./bin/mongod --dbpath=xxx --logpath xxx --fork --port 27017
参数解析
--dbpath 数据存放目录
--logpath 日志存放目录
--fork 以后台进程启动
--port 运行段看看
--rest web用户界面,(比运行端口大1000)
--bind_ip 0.0.0.0 可以使得远程连接
b.以配置文件的方式启动
也可以以配置文件的方式启动 ./mongod -f xxx/mongo.conf
dbpath = xxxx
logpath = xxxx
logappend = true
port = 27017
查看mongodb的进程是否启动
ps -aux|grep mongod
2)关闭
a.使用Ctrl+c关闭
如果以前台方式启动MongoDB服务,可以使用Ctrl + C关闭服务,这种关闭方式会等待当前进行中的操作完成,所以是干净的关闭方式
b.使用数据库命令关闭
登陆数据mongo --port 27017
>use admin;
>db.shutdownServer();
c.使用mongodb命令关闭
mongod --shutdown --dbpath /database/mongodb/data/
d.使用kill命令
ps -ef | grep mongo
kill -2 pid 或者 kill -15 pid
可以使用操作系统的kill命令,给mongod进程发送SIGINT 或 SIGTERM 信号, 即 "kill -2 PID," 或者 “kill -15 PID“。
注意:建议不要使用 ”kill -9 pid“,因为如果 MongoDB 运行在没开启日志(--journal)的情况下,可能会造成数据损失