Mongodb学习笔记速记(三)

版权声明:本文不管是不是原创,欢迎转载。 https://blog.csdn.net/alanfancy/article/details/49866173

十四. GridFS文件系统(分布式)

1.      GridFS是mongoDB自带的文件系统, 用二进制的形式存储大型文件系统

2.      利用工具mongofiles.exe

3.      使用GridFS

3.1  查看GridFS的所有功能

cmd->mongofiles 自带命令,cmd下可以直接访问

3.2  上传一个文件

//-d 选择数据库

//–l 选择本地地址

//put 添加上传

Mongofiles –d foobar –l“E:\a.txt” put “a.txt”

扫描二维码关注公众号,回复: 5482748 查看本文章

3.3  查看GridFS的文件存储状态

利用VUE查看

用集合查看

db.fs.chunks.find()

db.fs.files.find()  //能查到更详细的信息

//存储了文件系统的所有文件信息

3.4  查看文件内容

C:\user\thinkpad>mongofiles–d foobar get “a.txt”

//在VUE可以查看,shell无法打开文件

3.5  查看所有文件

mongofiles –d foobarlist

3.6  删除已经存在的文件/或在VUE中操作

mongofiles –d foobardelete “a.txt”

十五. 服务器端脚本

1.      Eval

服务器端运行eval,可以直接执行js代码

db.eval({“function(name){returnname}”,”uspcat”)  //马上执行,传入”uspcat”作为参数

2.      Javascript的存储

在服务器上保存js变量或者函数,供全局调用

2.1  把变量加载到特殊集合system.js中

db.system.js.insert({_id:name,value:”uspcat”})

//uspcat以后就是全局变量 

//调用db.eval(“return name”)

2.2  调用

db.system.js.insert({_id:”showName”,value:function(){return12}})

db.eval(“showName()”) //12

//system.js相当于Oracle中的存储过程,因为value可以写变量和函数体(js代码)

十六. mongoDB 启动配置

1.      启动项mongod –help

--dbpath  指定数据库的目录,默认(在window下)是c:\data\db\

--port  指定服务器监听的端口号,默认是2701

--fork  用守护进程的方式启动mongoDB

--logpath  指定日志的输出路径,默认是控制台

--config  指定启动项用到的文件的路径

--auth  用安全认证方式启动数据库

1.1 利用config配置文件来启动数据库改变端口为8888

mongodb.conf文件///////mongod.bat

dbpath=D:\sortsare\mongod\db

port=8888

启动文件

cd C:\Users\thinkpad\Desktop\MONGODB\mongodb-win32-x86_64-2.0.6bin\mongod.exe –config ../mongodb.conf

shell文件  /////mongod8888.bat

mongo 127.0.0.1:8888

在浏览器输入: localhost:9888

2.      停止mongoDB服务

1.1  ctrl+c组合键可以关闭数据库

1.2  admin数据库命令关闭数据库

>use admin

>db.shutdownServer()

十七. 导出,导入,运行时备份

1.      导出数据(中断其他操作)

打开CMD

利用mongoexport(cmd操作)

           -d 指明使用的库

           -c 指明要导出的表(集合)

           -o 指明要导出到哪里(路径)

           -csv 制定导出的csv格式

           -q 过滤导出

           --type <json|csv|tsv> 导出的格式

1.1 把数据从foobar中的persons导出(cmd操作)

           mongoexport –d foobar –c persons –oD:/persons.json

1.2  导出其他主机数据库的文档(cmd操作)

mongoexport –host192.168.0.16 –port 37017

2.      导入数据(中断其他操作)

API

http://cn.docs.mongodb.org/manual/reference/mongoimport/

//倒入persons文件(cmd操作)

mongoimport --dbfoobar --collection persons --file d:/persons.json

3.      运行时备份

1.1  运行时备份 mongodump

API

http://cn.docs.mongodb.org/manual/reference/mongodump

//导出127.0.0.1服务下的27017的foobar数据库

mongodump –host127.0.0.1:27017 -d foobar -o d:/foobar

1.2  运行时恢复mongorestore

API

http://cn.docs.mongodb.org/manual/reference/mongodump

//删除原本的数据库,用3.1导出的数据库恢复

db.dropDatabase() ///删除数据库

//cmd下操作

mongorestore --host127.0.0.1:27017 -d foobar -directoryperdb d:/foobar/foobar

1.3  懒人备份

mongoDB是文件数据库,可以用拷贝文件的方式进行备份

十八. Fsync锁,数据修复

1.      Fsync的使用

读写操作à缓存池à数据库

//上锁可以让缓存池的数据全部进到数据库

2.      上锁和解锁

上锁:

>use admin

>db.runCommand({fsync:1,lock:1})

解锁: db.currentOp()

3.      数据修复(影响性能)

当遇到停电等不可逆灾难,mongodb由于存储结构原因会导致产生垃圾数据,在数据恢复以后依然存在,这是数据库提供的自我修复的能力,并清理垃圾

db.repairDatabase()    //{“ok”:1}

4.       

十九. 用户管理,安全认证

1.      添加一个用户

//为admin添加uspcat用户和foobar数据库的yfc 用户

>user admin

>db.addUser(“uspcat”,”123”)

>user foobar

>db.addUser(“yfc”,”123”)

2.      启用用户

>db.auth(“名称”,”密码”)

3.      安全检查 –auth

3.1 在启动项(mongodb.bat)追加 --auto

mongod --dbpathD:\MongodbData --auth

3.2 //非foobar是不能操作数据库的

>user foobar

>db.persons.find()  ////报错

3.3 //启用自己的用户才能访问

>db.auth(“yfc”,”123”)

>db.persons.find()  //正确

3.4 非admin数据库的用户不能使用数据库命令

>db.auth(“yfc”,”123”)

>show dbs   ////报错

3.5 admin数据库中的数据经过认证为管理员用户

>user admin

>db.auth(“uspcat”,”123”)

>show dbs  //成功访问

4. 用户删除操作

db.system.user.remove({user:”yfc”});

二十. 主从复制

1.      主从复制是数据库同步备份的集群技术

//主服务器à从服务器

//主服务器à{从服务器, 从服务器, 从服务器…} //更保险

1.1  在数据库集群中要明确的知道谁是主服务器,主服务器只有一台

1.2  从服务器要知道自己的数据源也就是相对的主服务器是谁

1.3  --master确定主服务器,--slave确定从服务器,--source指向主服务器的地址端口

2.      主从复制集群案例

2.1  主服务器(8888):8888.conf

dbpath=D:\sortware\mongod\01\8888主数据库地址

port=8888 主数据库端口号

bind_ip=127.0.0.1 主数据库所在服务器

master=true 确定我是主服务器

 

从服务器(7777): 7777.conf

dbpath=D:\sortware\mongod\01\7777从数据库地址

port=7777 从数据库端口号

bind_ip=127.0.0.1 从数据库所在服务器

source=127.0.0.1:8888指向主数据库(启动时可以没有从服务器, 运行时用shell添加)

slave=true 确定我是从服务器

////启动时,先启动主服务器,再启动从服务器

///主服务器建立的数据,会自动复制到从服务器

////当主服务器损坏时,可以快速把从服务器转为主服务器

2.2  主从复制的其他设置项

--only 从节点à指定复制某个数据库,默认是复制全部数据库

--slavedelay 从节点à设置主数据库同步数据的延迟(秒)

--fastsync 从节点à以主数据库的节点快照为节点启动从数据库备份

--autoresync 从节点à如果不同步则重新同步数据库

--oplogSize 从节点à设置oplog的日志大小(主节点操作记录存储到local的oplog中),空间设置越大,存储越多

2.3  利用shell动态添加和删除从节点

////操作从服务器

>use local

>show collections

>db.sources.find()

//不难看出从节点中关节主节点的信息全部存到local的sources的集合中

//我们只要对集合进行操作就可以动态操作主从关系

//挂接主节点: 操作之前在主服务器留下从数据服务

db.sources.insert({“host”:”127.0.0.1:8888”})

//删除已经挂接的主节点: 操作之前在主服务器留下从数据库服务

db.sources.remove({“host”:”127.0.0.1:8888”})

2.4   

3.       

二十一. 副本集(第七讲 下)

1.      概念

1.1  服务器(A活跃,B备份,C备份)

服务器(A故障,B活跃,C备份)  根据权重算法推出B为主数据库

服务器(A备份,B活跃,C备份)  当A恢复后,自动变为备份数据库

A服务器配置:

>dbpath=d:\sortware\mongod\02\A

>port=1111 #端口

>bind_ip=127.0.0.1#服务地址

>replSet=child/127.0.0.1:2222#设定同伴为B

B服务器配置

>dbpath=D:\sortware\mongod\02\B

>port=222

>bind_ip=127.0.0.1

>replSet=child/127.0.0.1:3333#设定同伴为C

C服务器配置

>dbpath=D:\sortware\mongod\02\C

>port=3333

>bind_ip=127.0.0.1

>replSet=child/127.0.0.1:1111#设定同伴为A

 

///同伴间形成闭环

1.2  初始化副本集

////当没有设置主服务器时,mongo会根据先后推选一个

///副本集的从节点不能执行查询任务

>use admin

>db.runCommand({“replSetInitiate”:{

                   “_id”:”child”,

                   “members”:[{

                            “_id”:1,

                            “host”:”127.0.0.1:1111”

},{

                            “_id”:2,

                            “host”:”127.0.0.1:2222”

},{

                            “_id”:3,

                            “host”:”127.0.0.1:3333”

}]

}})

>rs.status() //查看集群状态

1.3  查看副本集状态

rs.status()  //用在活跃服务器

1.4   

2.      节点和初始化高级参数

standard 常规节点: 参与投票有可能成为活跃节点

passive 副本节点: 参与投票,但是不能成为活跃节点

arbiter 仲裁节点: 只是参与投票,不复制节点,也不能成为活跃节点

3.      高级参数

priority 0到1000之间,0代表是副本节点,1到1000是常规节点,数值越高权重越大

arbiterOnly:true 仲裁节点

用法:

members”:[{

           “id”:1,

           “host”:”127.0.0.1:1111”,

           arbiterOnly:true

}]”

4.      优先级相同时候仲裁组建的规则

A服:故障,B服1秒前更新,C服5秒前更新,则系统会优先选择最新的B作为主服

5.      读写分离操作à扩展读

5.1  一般情况下作为副本的节点是不能进行数据读操作的,但是在读取密集型的系统中读写分离是十分必要的 (如:A负责读,B负责取)

//在子服务器中操作

>use foobar

>db.persons.find()  ///报错

5.2  设置读写分离

slaveOkay:true

//在shell中无法实现,要在java或node中完成

6.      oplog 日志

被存储在本地数据库local中的,每一个文档保证这一个节点操作, 可以为oplog尽量设置大一些的空间用来保存更多的操作信息

//查找oplog(在主库设置)

>use local

>db.oplog.re.find()

//改变oplog大小

//在主库–master –oplogSize 1024

二十二. 分片

1.      插入负载技术à分片架构图

///片区:数据切割,分类分组存放

///先读取配置服务器里的配置信息,再根据信息分片

片区1      à |

片区2      à | à路由ßà用户

配置服务器  à|

2.      片键的概念和用处

////利用key为片键进行自动分片(表略)

3.      什么时候用到分片

3.1  机器的磁盘空间不足

3.2  单个的mongoDB服务器已经不能满足大量的插入操作

3.3  想通过把大数据放到内存中来提高性能

4.      分片步聚

4.1  创建一个配置服务器 (创建路由配置.bat)

>dbpath=d:\software\mongodbdata\08\config

>port=2000

>bind_ip=127.0.0.1

4.2  创建路由服务器,并且连接配置服务器,路由器要调用mongos命令

//mongos --port 1000--configdb 1270.0.0.1:2000

//port指定自身端口  -configdb 路由服务器监听配置服务器的地址端口

4.3  添加2个片区数据库 8081 和8082

4.4  利用路由为集群添加分片(允许本地访问)

//导入分片

db.runCommand({addshard:”127.0.0.1:8081”,allowLocal:true})

db.runCommand({addshard:”127.0.0.1:8082”,allowLocal:true})

//切记之前不能使用任何数据库语句

4.5  打开数据分片功能

//为数据库foobar打开分片功能

>use admin

>db.runCommand({“enablesharding”:”foobar”})

4.6  对集合进行分片(利用key分片)

>use admin

>db.runCommand({“shardcollection”:”foobar.bar”,”key”:{“_id”:1}})

4.7  利用大数据量进行测试(4000000条)

mongos >functionadd(){

            var i=0;

            for(;i<2000000;i++){

                     db.bar.insert({“age”:i+10,”name”:”Jim”})

}

}

mongos >functionadd2(){

            var i=0;

            for(;i<2000000;i++){

                     db.bar.insert({“age”:12,”name”:”Jim”+i})

}

}

mongos >usefoobar()

mongos >add()

mongos >add()

mongos > add2()

mongos >db.bar.find().count()  //查询总数 发现总数只有一部份,另一部份存到了第二个片区

///到第二片区查询

5.      查看配置库对于分片服务器的配置存储

mongos>db.printShardingStatus()

6.      查看集群对bar的自动分片机制配置信息

mongos>db.shards.find()

//{“_id”:”shard0000”,”host”:”127.0.0.1:8081”}

//{“_id”:”shard0000”,”host”:”127.0.0.1:8082”}

mongos>db.mongos.find()  //查询配置库

7.      为了保险起见的配置服务器集群

Shard01      --->

Shard02       --->

配置服务器  --->     --->路由 --->用户

配置服务器  --->

配置服务器  --->

8.      分片与副本集一起使用

{副本集,副本集,副本集} | --->Shard01片区  --->

  | --->shard02片区   --->   路由  <------>用户

     配置服务器    --->

猜你喜欢

转载自blog.csdn.net/alanfancy/article/details/49866173