架构师系列-mongo(一)-基础

MongoDB基础

什么是MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

存储结构

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

a27db0af2fc54af6a01a750ab9f5eb2f.png 

主要特点

  • 非关系型数据库,基于 Document data model(文档数据模型)
  • MongoDB以 BSON (BinaryJSON) 格式存储数据,类似于 JSON 数据形式
  • 关系型数据库使用 table (tables of rows)形式存储数据,而MongoDB使用 collections (collections of documents)
  • 支持 临时查询(ad hoc queries): 系统不用提前定义可以接收的查询类型
  • 索引通过 B-tree 数据结构, 3.2版本的WiredTiger 支持 log-structured merge-trees(LSM)
  • 支持索引和次级索引(secondary indexes): 次级索引是指文档或row有一个 主键(primary key)作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比较大的一个特点

MongoDB安装

下载MongoDB

查找MongoDB安装包

到MongoDB地址下载 Download MongoDB Community Server | MongoDB linux安装包,并选择对应的版本,点击copy link得到地址就可以通过linux环境wget 进行下载了

下载MongoDB

通过wget命令下载刚才在页面copy的链接进行下载

安装wget

yum -y install wget
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.5.tgz
解压安装包
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz
重命名文件夹

mv mongodb-linux-x86_64-rhel70-4.4.5 mongodb4.4.5
配置环境变量
这里根据自己对应的mongodb路径配置,将我们的MongoDB的bin目录配置到系统环境中

vi /etc/profile
在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:

#设置 Mongodb环境变量
export PATH=/opt/mongodb/mongodb4.4.5/bin:$PATH

保存后通过下面的命令使环境变量生效

source /etc/profile

安装MongoDB

准备工作

Linux下我们使用tgz格式的安装包进行安装,没有像windows那样可以使用msi进行简易安装,所以,它这个包是不全的,我们需要进入mongodb目录再手动创建两个目录,data和log,data目录是用于存放数据的,log目录是用于存放日志文件的

mkdir data logs
#创建mongodb的日志文件
touch logs/mongodb.log 

创建配置文件
因为该安装包不包含配置文件,我们需要去bin目录下面写一个mongodb的配置文件

vi mongodb.conf
这里面的数据文件以及日志路径就是我们刚才创建的目录的路径
#端口号 默认为27017
port=27017

#数据库数据存放目录
dbpath=/opt/mongodb/mongodb4.4.5/data

#数据库日志存放目录
logpath=/opt/mongodb/mongodb4.4.5/logs/mongodb.log

# pid存储路径
pidfilepath = /var/run/mongo.pid

#以追加的方式记录日志
logappend = true

#以后台方式运行进程
fork=true

#开启用户认证
#auth=true

#最大同时连接数
maxConns=100

#这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
bind_ip = 0.0.0.0

#每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#启用日志文件,默认启用
journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true

使用系统服务启动

创建启动脚本
在/etc/init.d/路径下创建mongod的启动脚本

vi /etc/init.d/mongod
注意将MONGODB_HOME路径改为mongodb的安装路径

#!/bin/sh  
# chkconfig:  

#MogoDB home directory  
MONGODB_HOME=/opt/mongodb/mongodb4.4.5/

#mongodb command  
MONGODB_BIN=$MONGODB_HOME/bin/mongod

#mongodb config file
MONGODB_CONF=$MONGODB_HOME/bin/mongodb.conf

#mongodb PID
MONGODB_PID=/var/run/mongo.pid

#set open file limit
SYSTEM_MAXFD=65535

MONGODB_NAME="mongodb"
. /etc/rc.d/init.d/functions

if [ ! -f $MONGODB_BIN ]
then
    echo "$MONGODB_NAME startup: $MONGODB_BIN not exists! "  
    exit
fi

start(){
 ulimit -HSn $SYSTEM_MAXFD
 $MONGODB_BIN --config="$MONGODB_CONF"  --fork ##added 
 ret=$?
 if [ $ret -eq 0 ]; then
    action $"Starting $MONGODB_NAME: " /bin/true
 else
    action $"Starting $MONGODB_NAME: " /bin/false
 fi

}

stop(){
    PID=$(ps aux |grep "$MONGODB_NAME" |grep "$MONGODB_CONF" |grep -v grep |wc -l) 
    if [[ $PID -eq 0  ]];then
    action $"Stopping $MONGODB_NAME: " /bin/false
    exit
    fi
    kill -HUP `cat $MONGODB_PID`
    ret=$?
    if [ $ret -eq 0 ]; then
            action $"Stopping $MONGODB_NAME: " /bin/true
            rm -f $MONGODB_PID
    else   
            action $"Stopping $MONGODB_NAME: " /bin/false
    fi

}

restart() {

    stop
    sleep 2
    start
}

case "$1" in
    start)
            start
            ;;
    stop)
            stop
            ;;
    status)
    status $prog
            ;;
    restart)
            restart
            ;;
    *)
            echo $"Usage: $0 {start|stop|status|restart}"
esac
设置权限
设置该脚本拥有执行权限

 chmod 755 /etc/init.d/mongod
启动MongoDB
使用如下命令启动MongoDB

# 启动mongodb
service mongod start
# 检查服务是否存在
ps -ef|grep mongo
出现如下就提示表示mongodb已经启动成功

049daddd58a4413681da89a081613188.png

访问测试

输入mongo命令使用本地客户端进行访问

 8d99ad0c93e943ac9a43542ebcfa645e.png

查询所有的数据库

84a669e104154f9c9cda5ff69fc6ef24.png 

关闭防火墙

如果需要mongoDB进行外部访问需要开放防火墙端口,因为我们使用了虚拟机所以直接关闭防火墙

检查防火墙状态

使用下面的命令可以检查防火墙状态

systemctl status firewalld.service

然后在下方可以查看得到“active(running)”,此时说明防火墙已经打开了

停止防火墙
在命令行中输入systemctl stop firewalld.service命令,进行关闭防火墙

systemctl stop firewalld.service

然后再使用命令systemctl status firewalld.service,在下方出现disavtive(dead),这样就说明防火墙已经关闭。

永久关闭防火墙
再在命令行中输入命令“systemctl disable firewalld.service”命令,即可永久关闭防火墙

systemctl disable firewalld.service

这样下次启动,防火墙就不会开启了

优雅关机
在生产环境,不要用 kill -9 关掉 mongodb 的进程,很可能造成 mongodb 的数据丢失;可以使用以下方式进行优雅关机

use admin
db.shutdownServer()

 

基本概念

和传统数据库对比

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们分别介绍,下表将帮助您更容易理解Mongo中的一些概念:

对比项mongo数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的了解Mongo中的一些概念:

 9ec2d745289541ad867f4470c405ec6e.png

 ac5d21bdf7d24469a54deb07022a558b.png

下面我们对里面的每一个概念进行详细解释

数据库

一个mongoDB的实例可以运行多个database,database之间是完全独立的,每个database有自己的权限,每个database存储于磁盘的不同文件。

命令规范

databases的name可以是任意的UTF-8字符串。但是有以下限制

  • 空字符串””是非法的
  • 不允许出现’’,.,$,/,\,\0字符
  • 建议名称都是小写
  • 不能超过64个字节

特殊数据库

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin:它是root级别的数据库,如果一个用户创建了admin数据库,该用户将自动集成所有数据库的权限,它可以执行一些服务器级别的命令,如列出所有数据库、关闭服务等。
  • local:该数据库将永远不能被复制,只能在单台服务器本地使用。
  • config:存储分布式部署时shard的配置信息

数据库操作

查看数据库列表

show dbs 命令可以显示所有数据的列表

930032b002464d76ab2424c9607af15f.png

显示当前数据库

执行 “db” 命令可以显示当前数据库对象或集合。

55c77971c8074d80a5f9e836076f9335.png

创建数据库

MongoDB 使用 use 命令创建数据库,如果数据库不存在,MongoDB 会在第一次使用该数据库时创建数据库。如果数据库已经存在则连接数据库,然后可以在该数据库进行各种操作。

show dbs;
#创建tmpdb数据库
use tmpdb;
show dbs;

注意: 在 MongoDB 中,只有在数据库中插入集合后才会创建! 就是说,创建数据库后要再插入一个集合,数据库才会真正创建。

use tmpdb;
# 在xxx的集合中插入一条数据
db.xxx.insertOne({"name":"张三"});
show dbs;

现在tmpdb数据库就显示出来了

339457b1ab0140b7991eec63827c8421.png 

删除数据库

可以使用db.dropDatabase()删除数据库

show dbs;
use tmpdb;
db;
#删除数据库
db.dropDatabase();
show dbs;

 

集合

相当于关系数据库的表,不过没有数据结构的定义。它由多个document组成。

命令规范

因为是无结构定义的,所以你可以把任何document存入一个collection里。每个collection用一个名字标识,需要注意以下几点:

  • 名字不允许是空字符串""
  • 名字不能包含\0字符,因为它表示名字的结束
  • 不能创建以system.开头的

集合操作

创建集合

可以通过db.createCollection(name,option)创建集合

参数说明:

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项
# 创建或选择tmpdb数据库
use tmpdb;
# 在db数据库创建一个blog的集合
db.createCollection("blog");

查看集合

如果要查看已有集合,可以使用 show collectionsshow tables 命令:

b78d2d398cda4fea9706f1fae5e95f50.png 

删除集合

MongoDB 中使用 drop() 方法来删除集合db.collection.drop()

如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

4a361f98a81f440bbdbed4209ad47e66.png 

文档

mongoDB的基本单位,相当于关系数据库中的行,它是一组有序的key/value键值对,使用json格式,

如:{"foo" : 3, "greeting": "Hello, world!"}。

key的命令规范

key是个UTF-8字符串,以下几点是需要注意的地方:

  • 不能包含\0字符(null字符),它用于标识key的结束
  • .和$字符在mangodb中有特殊含义,如$被用于修饰符($inc表示更新修饰符),应该考虑保留,以免被驱动解析
  • 以_开始的key也应该保留,比如_id是mangodb中的关键字

注意事项

  • 在mangodb中key是不能重复的
  • value 是弱类型,甚至可以嵌入一个document
  • key/value键值对在mangodb中是有序的
  • mangodb是类型和大小写敏感的,如{"foo" : 3}和{"foo" : "3"}是两个不同的document,{"foo" : 3}和{"Foo" : 3}

 

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值