mongodb数据库介绍-搭建-使用

介绍

特点

  1. 将数据存储为一个文档,数据结构由键值(key=>value)对组成。文档类似于 JSON
    对象。字段值可以包含其他文 档,数组及文档数组。
  2. 相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。
  3. 对数据之间事务关系支持比较弱,不适合此类型的应用。
  4. MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易。
  5. 替换修改使用update()命令可以替换完成的文档(数据)或者一些指定的数据字段
  6. MongoDB中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。 Map函数调用 emit(key,value)
    遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。
  7. GridFS 是分布式文件系统一个内置功能,可以用于存放大量小文件。
  8. MongoDB 以 BSON 结构(二进制)进行存储,对海量数据存储有着很明显的优势。
  9. 查询语句:是独特的MongoDB的查询方式。 查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组
  10. 适合场景:事件的记录,内容管理或者博客平台等等。
  11. 架构特点:可以通过副本集,以及分片来实现高可用。
  12. 数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存 中,从而达到高速读写。
  13. 成熟度与广泛度:新兴数据库,No SQL 数据库中最为接近关系型数据库

持久化方式


MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。

MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。

MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

mmap上的内容flush到硬盘就是操作系统的事情了。

#内存中修改数据后,mmap 数据flush到硬盘之前,系统宕机,数据就会丢失。

监控

Munin插件是网络和系统监控工具

Gangila插件是系统监视的工具

Cacti基于图形界面,用于查看CPU负载, 网络带宽利用率

优点缺点

优点

  1. 弱一致性(最终一致),更能保证用户的访问速度
  2. MongoDB本身的 failover 机制,无需使用如 MHA 之类的方式实现。

缺点

  1. 主要是无事物机制!
  2. 不支持事务操作(最主要的缺点)
  3. 占用空间过大

适用场景

  1. 数据不是特别重要(例如通知,推送这些)
  2. 数据表结构变化较为频繁
  3. 数据量特别大
  4. 数据的并发性特别高
  5. 数据结构比较特别(例如地图的位置坐标)

不适用的场景

  1. 需要使用复杂sql的操作
  2. 事务性系统

部署

单机

  1. 解压包

    tar -xvf mongodb-linux-x86_64-rhel70-3.6.3.tgz -C /data/
    mv  /data/mongodb-linux-x86_64-rhel70-3.6.3/ /data/mongodb-3.6.3
    
  2. 修改配置文件

    vim /data/mongodb-3.6.3/mongodb.conf
    #端口号
    port=27017
    #db目录
    dbpath=/usr/local/mongodb-3.6.3/data
    #为每一个数据库按照数据库名建立文件夹存放
    directoryperdb=true  
    #不预先分配存储
    noprealloc=true  
    #日志目录
    logpath=/usr/local/mongodb-3.6.3/logs
    #以追加的方式记录日志
    logappend=true
    #日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
    oplogSize=10000  
    #以后台方式运行进程
    fork=true
    #mongodb所绑定的ip地址
    bind_ip=节点IP
    #进程文件
    pidfilepath=/mongodb/master.pid  
    
  3. 创建相关文件

    mkdir /data/mongodb-3.6.3/data
    mkdir /data/mongodb-3.6.3/logs
    touch /data/mongodb-3.6.3/logs/mongodb.log
    
  4. 启动

    配置启动文件

    vim mongod.service
    [Unit]
    Description=mongodb
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/mongodb3.6.2/bin/mongod --config /usr/local/mongodb3.6.2/bin/mongodb.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/usr/local/mongodb3.6.2/bin/mongod --shutdown --config /usr/local/mongodb3.6.2/bin/mongodb.conf
    PrivateTmp=true
     
    [Install]
    WantedBy=multi-user.target
    
    cd /data/mongodb-3.6.3
    	./bin/mongo -f /usr/local/mongodb-3.6.3/mongodb.cnf
    #关闭
    ./bin/mongo -f /usr/local/mongodb-3.6.3/mongodb.cnf --shutdown
    
    netstat -tunpl | grep 27017
    

集群

Replica Set副本集

集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主 节点一致。
在这里插入图片描述

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点 不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询 服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置 叫做Read Preference Modes

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升 为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来 提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了 备节点还是备节点,所以咱们还是需要它的。

  1. 解压包(每个节点)

    tar -xvf mongodb-linux-x86_64-rhel70-3.6.3.tgz -C /data/
    mv  /data/mongodb-linux-x86_64-rhel70-3.6.3/ /data/mongodb-3.6.3
    
  2. 修改配置文件(每个节点)

    vim /data/mongodb-3.6.3/mongodb.conf
    #端口号
    port=27017
    #db目录
    dbpath=/usr/local/mongodb-3.6.3/data
    #为每一个数据库按照数据库名建立文件夹存放
    directoryperdb=true  
    #不预先分配存储
    noprealloc=true  
    #日志目录
    logpath=/usr/local/mongodb-3.6.3/logs
    #以追加的方式记录日志
    logappend=true
    #日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
    oplogSize=10000  
    #以后台方式运行进程
    fork=true
    #mongodb所绑定的ip地址
    bind_ip=节点IP
    #进程文件
    pidfilepath=/mongodb/master.pid  
    #replica set的名字
    replSet=123qweasd  
    
  3. 创建相关文件(每个节点)

    mkdir /data/mongodb-3.6.3/data
    mkdir /data/mongodb-3.6.3/logs
    touch /data/mongodb-3.6.3/logs/mongodb.log
    
  4. 启动mongodb

  5. 配置主,备,仲裁节点

    #可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。

    ./mongo 10.10.148.130:27017   #ip和port是某个节点的地址  
    	use admin  
    	cxktest={ _id:"replica set的名字", 		
    members:[ {_id:0,host:'10.10.148.130:27017',priority:2}, 	{_id:1,host:'10.10.148.131:27017',priority:1},   
    {_id:2,host:'10.10.148.132:27017',arbiterOnly:true}] };  
    
    #使配置生效 
    rs.initiate(cxktest)
    

Sharding

一个仲裁节点,但是Sharding还需要配置节点和路由节点。就三种集群搭建方式来说,这种是最复杂的
在这里插入图片描述

  1. 启动数据节点

    #192.168.4.43
    ./mongod --fork --dbpath ../data/set1/ --logpath ../log/set1.log --replSet test 
    #192.168.4.44
    ./mongod --fork --dbpath ../data/set2/ --logpath ../log/set2.log --replSet test 
    #192.168.4.45 决策 不存储数据
    ./mongod --fork --dbpath ../data/set3/ --logpath ../log/set3.log --replSet test 
    
  2. 启动配置节点

    #192.168.4.30
    ./mongod --configsvr --dbpath ../config/set1/ --port 20001 --fork 		
    --logpath ../log/conf1.log
    #192.168.4.31
    ./mongod --configsvr --dbpath ../config/set2/ --port 20002 --fork 
    --logpath ../log/conf2.log
    
  3. 启动路由节点

    #192.168.4.29
    ./mongos --configdb 192.168.4.30:20001,192.168.4.31:20002 --port 27017 
    --fork --logpath ../log/root.log 
    
  4. 配置Replica Set

    #ip和port是某个节点的地址
    ./mongo 192.168.4.43:27017   
    use admin
    cfg={ _id:"testrs", 
    members:[ {_id:0,host:'192.168.4.43:27017',priority:2}, 
    {_id:1,host:'192.168.4.44:27017',priority:1}, 
    {_id:2,host:'192.168.4.45:27017',arbiterOnly:true}] };
    
    #使配置生效
    rs.initiate(cfg)    
    
  5. 配置Sharding

    #这里必须连接路由节点
    ./mongo 192.168.4.29:27017
    
    #test表示replica set的名字当把主节点添加到shard以后,会自动找到set里的主,备,决策节点
    sh.addShard("test/192.168.4.43:27017")
    
    #diameter_test is database name	
    db.runCommand({enableSharding:"diameter_test"})    
    db.runCommand( 
    { shardCollection: "diameter_test.dcca_dccr_test",
    key:{"__avpSessionId":1}}) 
    
    #dcca_dccr_test即为Collection的名字。另外还有个key,这个是比较关键的东西,对于查询效率会有很大的影响
    

Master-Slaver(不推荐)

#主节点
./mongod --master --dbpath /data/masterdb/      
#备节点
./mongod --slave --source <masterip:masterport> --dbpath /data/slavedb/     

使用

连接

/usr/local/mongodb/bin/mongo

切换库

use local

  1. 创建表

    db.表名.save({"",""})
    例如:db.user.save({‘name’:’bob’,’age’:’21’})
    
  2. 添加insert

    db.表名.insert({‘name’:’bob’})
    

  1. 删除当前所在的库

    db.dropDatabase()
    
  2. 删除表

    db.表名.drop()
    db.表名.remove({})
    db.表名.remove({条件})
    

  1. 显示已有库

    show dbs
    
  2. 显示当前库

    db
    
  3. 显示库中的表

    show tables
    
  4. 查看表中字段

    db.表名.find()
    db.表名.find({条件})
    #返回一条文档
    db.表名.findOne()
    
  5. 统计表中数

    db.表名.count()
    

数据导出

mongoexport --host IP --port 端口 -d 库名 -c 表名 -f 字段1,字段2 --type=csv >  XXX.cxv
mongoexport --host IP --port 端口 -d 库名 -c 表名 -q ‘{条件}-f 字段1,字段2 --type=json >  XXX.json

数据导入

mongoexport --host IP --port 端口 -d 库名 -c 表名 --type=json  XXX.json
mongoexport --host IP --port 端口 -d 库名 -c 表名 --type=csv --headerline --drop XXX.json
#--headerline --drop;导入时如果库和表不存在,先创建在导入,如果存在以追加的方式导入,先删除原数据在导入		新数据

备份于恢复

  1. 备份

    #备份所有库
    mongodump --host IP --port 端口 -o 目录
    #备份指定数据库
    mongodump --host IP --port 端口 -d 库名 -c 表名 -o 目录
    
  2. 恢复

    Mongorestore  --host IP --port 端口 -d 库名 -c 表名 XXX.bson
    
  3. 查看

    Bsondump XXX.bson
    

喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

含义小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值