关于MongoDB的学习过程由下列的标题号顺序。
一、什么是NoSQL?
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
在现代的计算系统上每天网络上都会产生庞大的数据量。
这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展
二、什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
三、MongoDB的基本功能以及语法。
创建数据库 use DATABASE_NAME
删除数据库 db.dropDatabase()
插入文档 db.COLLECTION_NAME.insert(document)
更新文档 db.collection.update( ,,{upsert: ,multi: ,writeConcern: })
db.collection.save(,{writeConcern: })
删除文档 db.collection.remove(,{justOne: ,writeConcern: })
查询文档 db.collection.find(query, projection)
AND >db.col.find({key1:value1, key2:value2}).pretty()
OR >db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
条件操作符$gt -------- greater than >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
$type操作符db.col.find({"title" : {$type : value}}) value表示对应的类型
limit和skip db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
排序 db.COLLECTION_NAME.find().sort({KEY:1}) 1升序-1降序
索引 db.COLLECTION_NAME.ensureIndex({KEY:1})可创建多个,1升序-1降序
聚合 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
四、MongoDB单机部署和分片复制集部署
单机部署的话解压事先准备好的mongodb的压缩包,可以在界面解压也可以在Xshell中用命令解压。
创建conf文件夹来存放mongod.conf文件,通过指定配置文件来启动MongoDB。
dbpath=/data/volume_b/mongodb/data/db
logpath=/data/volume_b/mongodb/logs/mongodb.log
pidfilepath=/data/volume_b/mongodb/logs/mongod.pid
port=27017
fork=true
logappend=true
journal=true
dbpath是指向数据库路径。
logpath是指定日志文件路径,该文件将保存所有的日志记录、诊断信息。运用熟悉时可以通过mongdb.log这个日志文件来检查出错的地方。
pidfilepath是进程ID,没有指定则启动时候就没有PID文件。默认缺省,mongod.pid里面存放的是进程号,方便kill时查看,不用再ps aux来看进程号。
logappend是使用追加方式写日志。
port是端口。默认27017,MongoDB的默认服务TCP端口,监听客户端连接。富贵吧要是端口设置小于1024,比如1021,则需要root权限启动。
fork是否后台运行,设置为true 启动 进程在后台运行的守护进程模式
journal启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里。
然后用numactl --interleave=all ./bin/mongod -config ./conf/mongod.conf来启动mongodb数据库。(为什么用numactl这个命令,是为了调整NUMA策略,让所有的node用来运行mongodb数据库)
这里列出三个最经常出现在mongodb数据库启动的错误。
(一)ERROR: child process failed, exited with error number 48
所在的端口27017mongo已经运行了你可以运行下面的命令来查看PID是使用的端口ntulp | grep 27017
(二)ERROR: child process failed, exited with error number 1
权限不够无法访问路径文件,或者你的路径设置有问题。
(三)ERROR: child process failed, exited with error number 100
你的mongod进程正在运行,要kill掉,具体看(四)
(四)还有就是使用完mongo数据库要正常退出。有两种方法:use admin然后db.shutdownServer()或者kill -9 进程号
五、分片复制集部署
这个部分还在研究。