mongodb入门教程

mongodb入门教程

      作为mongodb小白一枚,为了将来能够和大神们搭得上话,特此来稳固一下基础知识。

一、基础介绍

      这里多mongodb来个简单的自我独白:“大家好,我是你们最喜欢使用的分布式文件存储数据库---mongodb,我是有高端语言C++编写实现的。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB[2]  是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引”。这些基本概念大家估计是最不想看的。但是要成为大神,你一定要知道你使用的工具的优缺点,问什么要使用这个工具,使用它能够我们带来什么好处。下面简单介绍一下mongodb的优缺点:

    优点:

  1.    面向文档存储(类JSON数据模式简单而强大)
  2.    动态查询
  3.    全索引支持,扩展到内部对象和内嵌数组
  4.    查询记录分析
  5.    快速,就地更新
  6.    高效存储二进制大对象 (比如照片和视频)
  7.    复制和故障切换支持
  8.    Auto- Sharding自动分片支持云级扩展性
  9.    MapReduce 支持复杂聚合
  10.    支持多语言版本

   缺点:

  1.    不支持事务(进行开发时需要注意,哪些功能需要使用数据库提供的事务支持)
  2.    MongoDB占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了
  3.    MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
  4.    在32位系统上,不支持大于2.5G的数据(很多操作系统都已经抛弃了32位版本,所以这个也算不上什么缺点了,3.4版本已经放弃支持32 位 x86平台)

mongodb和mysql对比

对比mongodbmysql
数据库模型非关系型关系型
存储方式虚拟内存+持久化不同引擎有不同存储方式
查询语句独特的mongodb查询方式传统的SQL语句
架构特点可以通过副本集、以及分片来实现高可用常见的有单点,M-S,MHA,MMM,Cluster等机构方式
数据处理方式基于内存,将热数据存在物理内存中,从而达到高速读写不同引擎有不同特点
成熟度新型数据库,成熟度低(正在大规模普及使用)具有较为成熟的体系,成熟度较高
广泛度NoSQL数据库中,mongodb是较为完善的DB之一,使用人群不断增加开源数据库份额在不断增加,mysql份额也在持续增长中

二、mongodb数据库安装

    1. 安装前配置准备

        MongoDB是一个文档数据库。一个MongoDB可以有我个Instance实例,每个实例都可以有多个DataBase,每个DataBase又可以有多个Collection;每个Collection一般有很多Document。如果要和MySQL作类比的话,Document相当于行,Collection相当于表,DataBase相当于库。

         MongoDB的安装和启动均在普通用户下进行。MongoDB的部署有单机和集群情况,其中集群部署又分为主从、副本集、分片。主从和副本集都是做主从备份的,区别在与主从集群在主节点宕机后从节点需要手动切换成主节点,而副本集则可以自动切换,实现容灾功能,目前主从集群官方已不推荐使用;分片集群是在服务器资源不够用的情况下进行水平扩容。

        本次安装主要以操作系统为Red Hat Enterprise Linux Server release 6.4 (Santiago),linux内核版本是2.6.32-358.el6.x86_64。介绍MongoDB的单机部署和分片集群部署。下面安装部署统一使用普通用户安装。

    2. 软件安装

        2.1 单机安装

            2.1.1 说明

安装配置清单

主机名node69
主机绑定机器IP192.168.230.128
部署包

mongodb-linux-x86_64-3.0.8.tgz

安装目录/home/apple/mongodb-alone
配置文件/home/apple/mongodb-alone/conf/mongodb.conf
日志位置/home/apple/mongodb-alone/logs/mongodb.log
使用端口27017

            2.1.2 部署

1、下载介质,上传到服务器上,本文使用/home/apple目录下,进入目录

输入命令tar -zxvf mongodb-linux-x86_64-3.0.8.tgz,解压mongodb部署包,解压完成后获得mongodb-linux-x86_64-3.08目录

174935_qGCi_3275321.png

2、输入命令mv mongodb-linux-x86_64-3.0.8 mongodb-alone,将安装文件夹名字改为mongodb-alone

175024_2ARn_3275321.png

3、输入命令cd mongodb-alone,进入安装目录,内容如下

175114_29xl_3275321.png

4、创建数据存储目录和日志存储目录以及日志存储文件

输入命令:mkdir -p data     (创建数据存储目录)

输入命令:mkdir logs 

输入命令:touch logs/mongodb.log    (创建日志存储文件)

175218_ZJlr_3275321.png

5、创建配置文件

输入命令:mkdir conf(创建配置文件夹)

输入命令:touch conf/mongodb.conf(创建配置文件)

175315_QtuF_3275321.png

输入命令vi conf/mongodb.conf,编辑mongodb.conf文件

添加如下表格中的内容(下面有解释),并保存

port=27017

dbpath=/home/apple/mongodb-alone/data

storageEngine=wiredTiger

wiredTigerCacheSizeGB=1

wiredTigerJournalCompressor=zlib

logpath=/home/apple/mongodb-alone/logs/mongodb.log

logappend=true

fork=true

175516_GVTZ_3275321.png

解释:

port:mongodb端口号,默认是27017

dbpath:mongodb数据存储路径,就是之前创建的data/mongodb目录

storageEngine:存储引擎类型

wiredTigerCacheSizeGB:工作集大小(使用内存大小),根据需要设置(我这里用来测试的只用了1G),单位GB

wiredTigerJournalCompressor:文件压缩方式(有3种:none|snappy|zlib不压缩|有效利用资源的压缩(默认启用)|出色的压缩,但需要占用更多资源)

logpath:日志存储路径,是一个文件的路径,这里是之前的logs/mongodb.log文件

logappend:日志以在文件末尾追加的方式存储

fork:后台运行

            2.1.3  启动mongodb

1、输入命令

bin/mongod -f /home/apple/mongodb-alone/conf/mongodb.conf

启动mongodb服务,如果出现started successfully说明启动成功

181406_jMdB_3275321.png

2、输入命令ps -ef | grep mongo,可以看到刚刚启动的mongodb进程。或,输入netstat -lanp | grep 27017 查看27017端口

181454_6Ezm_3275321.png

3、输入命令bin/mongo 127.0.0.1:27017 可以进入mongodb,如果没有报错标示成功

194534_Q4YT_3275321.png

4、查看mongodb数据库输入命令:show dbs

194726_Ej62_3275321.png

            2.1.4  关闭mongodb

1、使用命令:ps -ef |grep mongo 查看进程号

194920_m09i_3275321.png

2、输入命令:kill -2 10917 关闭mongodb数据库,(千万不是使用kill -9 pid

195138_nImd_3275321.png

       

          2.2 集群部署

          这里后面继续补充。。。。。。。。。。

        

 

 

 

三、mongodb基本操作

      1.  mongodb创建数据库、表以及用户操作

                1、输入命令:db.getMongo() 查看当前db的链接机器地址

                    201342_mN9h_3275321.png

                2、输入命令: show dbs mongodb中所有数据库

                    200435_LkNE_3275321.png

                3、输入命令:use test 创建test数据库或切换test数据库(MongoDB use DATABASE_NAME 用于创建数据库。该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库。)

                    200210_WNHp_3275321.png

                4、 输入命令:show collections 查看数据库test中所有表Collection结构(由于当前test数据库没有表Collection,所以没有任何显示)

                    200956_5XJr_3275321.png

                5、Collection聚集集合

                    a、创建一个聚集集合(table),输入命令: db.createCollection("collName", {size: 20, capped: 5, max: 100})

                        201700_585A_3275321.png

                    b、得到指定名称的聚集集合(table),输入命令:db.getCollection("collName")

                        201818_t7CZ_3275321.png

                    c、 得到当前db的所有聚集集合,输入命令:db.getCollectionNames()

                        201931_YWxt_3275321.png

                    d、向collection中插入一条数据,输入命令:db.collName.insert({name:"jack",age:33})

                        202403_xrg5_3275321.png

                    d、得到指定聚集集合(table)数据,输入命令: db.collName.find()  可以查到刚刚插入的数据

                        202427_eD8B_3275321.png

                    e、其他命令,大家都可以试试

                        查看聚集集合基本信息

                        1、查看帮助 db.collName.help();

                        2、查询当前集合的数据条数 db.collName.count();

                        3、查看数据空间大小 db.collName.dataSize();

                        4、得到当前聚集集合所在的db db.collName.getDB();

                        5、得到当前聚集的状态 db.collName.stats();

                        6、得到聚集集合总大小 db.collName.totalSize();

                        7、聚集集合储存空间大小 db.collName.storageSize();

                        8、Shard版本信息 db.collName.getShardVersion()

                        9、聚集集合重命名 db.collName.renameCollection("collNameTwo");collName重命名为collNameTwo

                        10、删除当前聚集集合 db.collName.drop();

    

        2.  mongodb用户权限操作

                1、切换至admin数据库,输入命令:use admin

                2、创建一个用户管理用户admin用户,赋予管理权限


db.createUser(
    {
       user: "admin",
      pwd: "admin",
       roles: [
          { role: "userAdminAnyDatabase", db: "admin" }    
       ]
     }
 )

204021_fpIq_3275321.png

                3、切换需要使用的普通db下面,例如输入命令:use mslog   

                4、为mslog创建一个可读写用户,用户名:xiaoxiao    密码:xiaoxiao

db.createUser(
     {
       user: "xiaoxiao",
       pwd: "xiaoxiao",
       roles: [
          { role: "readWrite", db: "mslog" }    
       ]
     }
 )

204357_N2AV_3275321.png

                5、关闭mongodb,重启mongodb数据库验证用户权限是否生效,使用命令:quit() 推出mongodb命令行,

                6、输入命令:ps -ef |grep mongo 查看进程号,再使用kill -2 pid关闭mongodb数据库

                7、再到mongodb-alone/conf/mongodb.conf   mongodb的配置文件中添加权限启动项目 auth=true 添加到配置最后

port=27017
dbpath=/home/apple/mongodb-alone/data
storageEngine=wiredTiger
wiredTigerCacheSizeGB=1
wiredTigerJournalCompressor=zlib
logpath=/home/apple/mongodb-alone/logs/mongodb.log
logappend=true
fork=true
auth=true

                8、使用带权限启动mongodb,输入命令:bin/mongod -auth -f /home/apple/mongodb-alone/conf/mongodb.conf

                    205626_RD1D_3275321.png

                9、 进入mongodb命令行,不用用户登录直接查看admin下面collection

                    205902_mUxD_3275321.png

                10、使用admin用户登录查看当前用户,再使用小明不同用户查看数据库mslog

                    210449_v94V_3275321.png

                    

> use mslog
switched to db mslog
> db.auth("xiaoxiao","xiaoxiao")
1
> show collections
> 
> 
> use admin
switched to db admin
> show collections
system.users
system.version
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "R1OA10qFZwU983mLGLNvsw==", "storedKey" : "0Nlv6bxjHdf0YSXNtw+NdfCQQHU=", "serverKey" : "wAtSgUg9XH5Hx7npbRg7ax7ukS4=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "mslog.xiaoxiao", "user" : "xiaoxiao", "db" : "mslog", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4QShsMOkbzJrpemIpnj8oA==", "storedKey" : "LJpdLDx6qxg17Ua2vuMp9GuL+V4=", "serverKey" : "TfxYegmo22jmEU6oyAUttJaGmA4=" } }, "roles" : [ { "role" : "readWrite", "db" : "mslog" } ] }
> 
> 
> use test
switched to db test
> show collections
collName
> db.collName.find()
Error: error: { "$err" : "not authorized for query on test.collName", "code" : 13 }
> 
> 
> 
> 
> use mslog 
switched to db mslog
> 
> 
> 
> db.testtable.insert({name:"xiaoming",age:33})
WriteResult({ "nInserted" : 1 })
> 
> 
> show collections
testtable
> db.testtable.find()
{ "_id" : ObjectId("592434f56f93ff4b4c6d7d8e"), "name" : "xiaoming", "age" : 33 }
> 

这里面有一个详细mongodb用户角色授权可以瞅瞅http://www.2cto.com/database/201507/420854.html

 

转载于:https://my.oschina.net/u/3275321/blog/907756

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值