●MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
●MongoDB是一款跨平台、面向文档的数据库。可以实现高性能、高可用性,并且能够轻松扩展,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点可以保证服务器的性能。
●在大数据时代中,大数据量的处理已经成了考量一个数据库最重要的原因之一。MongoDB的一个主要目标就是尽可能的让数据库保持卓越的性能,这很大程度地决定了MongoDB的设计。MongoDB选择了最大程度而利用内存资源用作缓存来换取卓越的性能,并且会自动选择速度最快的索引来进行查询。MongoDB尽可能精简数据库,将尽可能多的操作交给客户端,这种方式也是MongoDB能够保持卓越性能的原因之一。
●MongoDB是非关系性数据库(NoSQL)中功能最丰富,最像关系数据库的。不采用关系模型是为了获取更好的扩展性,MongoDB不在有“行”的概念,其运行方式主要基于两个概念:集合(collection)和文档(document)。
●Mongo是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。
●1、面向集合的存储:适合存储对象及JSON形式的数据。
●2、MongoDB安装简单,提供了面向文档的存储功能,操作起来比较容易。
●3、MongoDB提供了复制,高可用性和自动分片功能。如果负载增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上,这就是所谓的分片。
●4、MongoDB支持丰富的查询表达式。
●5、高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
●MongoDB可以为Web应用提供可扩展的高性能数据存储解决方案。MongoDB主要适用领域有网站数据、分布式场景、数据缓存和JSON文档格式存储。适合大数据量、高并发、弱事务的互联网应用,其内置的水平扩展机制提供了从几百万到十亿级别的数据处理能力,可以很好的满足Web2.0和移动互联网应用数据存储的要求。
●Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的,Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据,持久化是使用RDB方式或者aof方式。
●mongodb是文档型的非关系型数据库,MongoDB更类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。
●mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。
●然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。
●至于mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。
1.配置官方yum源安装mongodb
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim mongodb-org.repo
[mongodb]
name=mongodb
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
[root@localhost yum.repos.d]# yum list
[root@localhost yum.repos.d]# yum -y install mongodb-org
2.修改配置文件监听地址
[root@localhost ~]# vim /etc/mongod.conf
...省略内容
net:
port: 27017 #监听端口
bindIp: 0.0.0.0 #监听地址,原来是127.0.0.1,只能本地访问,换成0.0.0.0,任意网段都能访问
3.启动服务mongod.service
[root@localhost ~]# systemctl start mongod.service
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# mongo #输入mongo就进入数据库了
...省略内容
> show dbs #查看有哪几个库
admin 0.000GB
config 0.000GB
local 0.000GB
1.拷贝配置文件以创建新实例
[root@localhost ~]# cd /etc/
[root@localhost etc]# cp -p mongod.conf mongod2.conf
[root@localhost etc]# vim mongod2.conf
...省略内容
path: /data/mongodb/mongod2.log
dbPath: /data/mongodb/mongo
port: 27018
[root@localhost etc]# mkdir -p /data/mongodb
[root@localhost etc]# cd /data/mongodb/
[root@localhost mongodb]# touch mongod2.log
[root@localhost mongodb]# mkdir mongo
2.加载刚才新建的实例
[root@localhost mongodb]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 14751
child process started successfully, parent exiting
[root@localhost mongodb]# mongo --port 27018 #登录监听端口为27018的数据库
> db.version() #可以查看版本
3.6.20
> use school 'mongodb中无需创建,直接使用(在里面创建了集合show dbs才能看到)'
switched to db school
> db.createCollection('info') '在school库中创建集合info'
{
"ok" : 1 }
> db.info.insert({
"id":1,"name":"zhangsan","score":78,"hobby":["game","sport","talk"]}) '在集合中插入数据'
WriteResult({
"nInserted" : 1 })
> db.info.find()
{
"_id" : ObjectId("5f5dc4f3f03df9c767569daf"), "id" : 1, "name" : "zhangsan", "score" : 88, "hobby" : [ "game", "sport", "talk" ] }
> for(var i=2;i<=100;i++)db.info.insert({
"id":i,"name":"jack"+i}) '利用循环一次性创建多个数据'
WriteResult({
"nInserted" : 1 })
> db.info.find()
{
"_id" : ObjectId("5f56e212cd5781b1ba9d5426"), "id" : 1, "name" : "zhangsan", "score" : 78, "hobby" : [ "game", "sport" ] }
{
"_id" : ObjectId("5f56e319cd5781b1ba9d5427"), "id" : 2, "name" : "jack2" }
{
"_id" : ObjectId("5f56e319cd5781b1ba9d5428"), "id" : 3, "name" : "jack3" }
{
"_id" : ObjectId("5f56e319cd5781b1ba9d5429"), "id" : 4, "name" : "jack4" }
...省略内容
Type "it" for more
> db.info.findOne({
"id":3}) #利用关键字查找单条记录
{
"_id" : ObjectId("5f56e319cd5781b1ba9d5428"), "id" : 3, "name" : "jack3" }
> a=db.info.findOne({
"id":2})
{
"_id" : ObjectId("5f56e319cd5781b1ba9d5427"), "id" : 2, "name" : "jack2" }
> typeof(a.id)
number
> typeof(a.name) '查看某个字段的类型'
string
> db.info.update({
"id":10},{
$set:{
"name":"tom"}}) '对id=10的记录进行修改'
WriteResult({
"nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> a=db.info.findOne({
"id":10})
{
"_id" : ObjectId("5f56e319cd5781b1ba9d542f"), "id" : 10, "name" : "tom" }
> db.createCollection('test')
{
"ok" : 1 }
> show collections
info
test
> db.test.drop() '删除集合'
true
> show collections '查看集合;等于show tables'
info
> use myscool
switched to db myscool
> db.createCollection('test')
{
"ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
myscool 0.000GB
school 0.000GB
> db.dropDatabase() '删除库myschool,要先use myschool'
{
"dropped" : "myscool", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> db.copyDatabase("school","share") #拷贝school库,新建库名为share
{
"ok" : 1 }
> db.currentOp()
...省略内容
"opid" : 880, #找到进程号
> db.killOp(880)
导出操作:
[root@localhost mongodb]# mongoexport -d school -c info -o /opt/school.json
2020-09-08T10:10:38.155+0800 connected to: localhost
2020-09-08T10:10:38.156+0800 exported 100 records
-d:指定数据库
-c:指定数据库中的集合
文件名要以.json结尾
导入操作:
[root@localhost mongodb]# mongoimport -d school -c test --file /opt/school.json
2020-09-08T10:11:56.382+0800 connected to: localhost
2020-09-08T10:11:56.388+0800 imported 100 documents
仅导出某一行:
[root@localhost mongodb]# mongoexport -d school -c info -q '{"id":{"$eq":10}}' -o /opt/test.json
注释:
-d:指定数据库
-c:指定集合
备份库school
[root@localhost mongodb]# mongodump -d school -o /backup/
2020-09-08T10:16:47.324+0800 writing school.info to
2020-09-08T10:16:47.324+0800 writing school.test to
2020-09-08T10:16:47.325+0800 done dumping school.test (100 documents)
2020-09-08T10:16:47.325+0800 done dumping school.info (100 documents)
[root@localhost mongodb]# cd /backup/
[root@localhost backup]# ls
school
[root@localhost backup]# cd school/
[root@localhost school]# ls
info.bson info.metadata.json test.bson test.metadata.json
恢复库到abc库(如果库不存在直接新建)
[root@localhost school]# mongorestore -d abc --dir /backup/school/
●创建完27018端口的实例后进行克隆集合操作
●27018端口的实例克隆2701端口的实例school库中的info集合
[root@localhost etc]# mongo --port 27018
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db.runCommand({
"cloneCollection":"school.info","from":"14.0.0.10:27017"})
{
"ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> use school
switched to db school
> show tables #克隆成功
info