MongoDB简介:
Mongodb是一款跨平台、面向文档的数据库可实现高性能、高可用性、并能够轻松扩展是一个基于分布式文件存储的开源数据库系统,在高负载的情况下添加更多的节点,可以保证服务器的性能。
Mongodb同时也是一个介于关系型和非关系型数据库之间的产品,在非关系型数据库中功能最丰富最想关系型数据库。不采用关系摸型主要是为了获得更好的扩展性,不再有row行的概念,其运行方式主要基于两个概念:集合与文档。
MongoDB特点:
面向集合存储、模式自由、丰富的查询语句和多级索引、复制机制、易于水平扩展、可插入存储引擎、跨平台多语言支持。
安装简单提供面向文档存储功能,操作比较容易
提供复制、高可用性和自动分片功能,如果负载增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他计算机节点上,所谓分片。
支持丰富的查询表达式,查询指令使用JSON形式标记可轻易查询文档中内嵌对象及数组
支持各种编程语言:Ruby、Python、java、php、c++、C#
MongoDB适用领域:
可以为WEB 2.0应用提供可扩展的高性能数据存储解决方案,MongoDB主要适用领域有网站数据、分布式场景、数据缓存和Json文档格式存储,适用大数据量、高并发、弱事务的互联网应用,其内置的水平扩展机制提供了从几百万到十亿级别的数据处理能力,可以很好的满足web2.0和移动互联网应用数据存储的要求。
常用术语及说明:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设为主键 |
数据类型:
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在MongoDB中UTF-8编码的字符串才是合法的 |
Integer | 整型数值。用于存储数值,根据用户的服务器,可分为32位或64位 |
Boolean | 布尔值。用于存储布尔值(真/假) |
Double | 双精度浮点值。用于存储浮点值 |
Arrays | 用于将数组或列表或多个值存储为一个键 |
Object | 用于内嵌文档 |
Null | 用于创建空值 |
Date | 日期时间。用户可以指定自己的日期时间,创建Date对象,传入年月日信息 |
Binary Date | 二进制数据,用于存储二进制数据 |
常用的基本操作:
操作 | 描述 |
---|---|
show dbs | 查看当前实例下的数据库列表 |
show users | 显示用户 |
use <db_name> | 切换当前数据库,创建数据库 |
db.help() | 显示数据库操作命令 |
show collection | 显示当前数据库中的集合 |
db.foo.help() | 显示集合操作命令,foo是当前数据看下的集合 |
db.foo.find() | 对当前数据库中foo集合进行数据查找 |
db.dropDatabase() | 删除数据库 |
配置阿里云镜像:
cat>>/etc/yum.repos.d/mongodb-org.repo<<'EOF'
[mongodb-org]
name = MongoDB Repository
baseurl = https://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck = 1
enabled = 1
gpgkey = https://www.mongodb.org/static/pgp/server-3.6.asc
EOF
安装MongoDB
yum -y install mongodb-org
启动,关闭MongoDB:
mongod -f /etc/mongod.conf #启动
mongod -f /etc/mongod.conf --shutdown #关闭
多实例:
mkdir -pv /data/mongod1/logs/mongod1
chmod -R 777 /data/*
cp -a /etc/mongod.conf /etc/mongod1.conf
vim /etc/mongod1.conf
#systemLog:
#destination: file
#logAppend: true
#path: /data/logs/mongod1/mongod1.log 更换log目录
#storage:
# dbPath: /data/mongod1 跟换data目录
# journal:
# enabled: true
#net:
# port: 27017 更换端口 27018
#bindIp: 127.0.0.1
启动和上边方法一致
进入实例需指定ip及端口
mongo 127.0.0.1:27017
mongo 127.0.0.1:27018
基本操作:
#创建
use test #创建库
dbs #查看创建的库
test
#插入
db.User.insert({'id':1,'name':'opt'}) #往User表插入一条数据
show tables #查看所有集合
User
#查看集合
db.User.find()#查看User集合中的文档
{ "_id" : ObjectId("60055f0b90411bd140ea36cd"), "id" : 1, "name" : "opt" }
#查看类型
a=db.User.findOne({'id':1}) #查看数据类型
{ "_id" : ObjectId("60055f0b90411bd140ea36cd"), "id" : 1, "name" : "opt" }
> typeof(a.id)
number
> typeof(a.name)
string
#更新
{ "_id" : ObjectId("6005627b90411bd140ea36ce"), "id" : 1, "name" : "opt" }#更新前
db.User.update({'id':1},{$set:{'name':'abc'}})#更新
{ "_id" : ObjectId("6005627b90411bd140ea36ce"), "id" : 1, "name" : "abc" }#更新后
#删除库及表
db.dropDatabase()#删除库注意需提前进入要删除的库中
db.User.drop()#删除表注意需提前进入对应的库中
导入导出:
#导入导出
mongoexport -d test -c User -o ./User.json #导出
mongoimport -d test -c User1 --file User.json #导入
参数说明:
-d: 指明数据库名字
-c: 指明collection的名字
-f: 指明要导出那些列
-o: 指明要导出的文件名
-q: 指明导出数据的过滤条件
具体命令帮助信息可以通过--help查看
备份恢复:
#备份
mkdir backup
mongodump -d test -o ./backup/
[root@localhost ~]# ll backup/*
总用量 16
-rw-r--r--. 1 root root 48 1月 18 18:49 User1.bson
-rw-r--r--. 1 root root 124 1月 18 18:49 User1.metadata.json
-rw-r--r--. 1 root root 48 1月 18 18:49 User.bson
-rw-r--r--. 1 root root 123 1月 18 18:49 User.metadata.json
#恢复
mongorestore -d test1 --dir=./backup/test/
参数说明:
-d: 指明数据库名字
-c: 指明collection的名字
-h: 指定主机也可以同时指定端口
-o: 指明要导出的文件名