MongoDB简介和安装

MongoDB:NoSQL(非关系型)

应用场景:几乎所有场景都可以应用MongoDB,比如:视频类、游戏类、电商类应用

1、各种应用服务的日志存储,MongoDB的高性能足够支撑关系型数据库2-3倍以上的TPS(事务处理速率)/QPS(请求速率),同时自带的三种压缩格式方便在容量和性能直接作出选择,通过MongoDB存储日志文件,查询简单(索引),写入导出方便(弹性结构没有表结构限制,例如:第一行5列,第二行可以是3列)。

2、敏捷开发,如果想快速构建应用系统,同时还想拥有高性能,高灵活性的schema,用MongoDB吧。

3、地理位置信息存储,通过2d和2dsphere索引,可以方便的查询出具体的位置信息。

4、json存储,json的数据结构简单、直观,非常适合用来表达数据,且易于阅读、扩展。(json就是键值对的,例如:elk的日志格式)

主要特性

1、事务支持 MongoDB 目前只支持单文档事务,需要复杂事务支持的场景暂时不适合。

PS:4.0版本已经GA,已经支持ACID事务。

2、灵活的文档模型,JSON 格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代。

3、高可用复制集,满足数据高可靠、服务高可用的需求,运维简单,故障自动切换。

4、可扩展分片集群,海量数据存储,服务能力水平扩展。

5、高性能,mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求。

6、强大的索引支持 地理位置索引可用于构建 各种 O2O 应用、文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求。(索引自动建立)

7、Gridfs,解决文件存储的需求。(例如:分表)

8、aggregation & mapreduce,(映射简约),解决数据分析场景需求,用户可以自己写查询语句或脚本,将请求都分发到 MongoDB 上完成。(大数据分析)

逻辑结构

MySQL逻辑结构

数据行

Mongodb 逻辑结构

库database

集合(collection)(表)

文档(document)(行)

实验环境

实验步骤

1、关闭大页内存机制(变成默认的16K)

永久关闭:

vim /etc/rc.local

添加:

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then

  echo never > /sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then

   echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

临时关闭:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

2、修改最大文件数

查看最大文件数

ulimit -n

修改最大连接数为65535

vim /etc/security/limits.conf

添加:

* soft nofile 65535

* hard nofile 65535

vim /etc/pam.d/login

添加:

session required /lib/security/pam_limits.so

重启

shutdown -r now

ulimit -n

3、创建所需用户和组

useradd mongod

4、创建mongodb所需目录

mkdir -p /mongodb/{conf,log,data}

5、安装mongodb

将mongodb-linux-x86_64-rhel70-4.4.4.tgz包拖入/root目录

tar xf mongodb-linux-x86_64-rhel70-4.4.4.tgz

cp -a mongodb-linux-x86_64-rhel70-4.4.4/bin/ /mongodb/

6、设置目录权限

chown -R mongod:mongod /mongodb/

7、使用mongodb用户登录并设置环境变量

降级启动

su – mongod

vim .bash_profile

添加:

export PATH=/mongodb/bin:$PATH

source .bash_profile

8、启动mongodb

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork

netstat -anpt | grep mongo

9、登录mongodb

mongo

执行简单语句测试:

show databases

use local

show tables

10、使用配置文件启动mongodb

关闭mongodb

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork --shutdown

创建配置文件

vim /mongodb/conf/mongodb.conf

添加:

logpath=/mongodb/log/mongodb.log

dbpath=/mongodb/data

port=27017

logappend=true

fork=true

启动mongodb

mongod -f /mongodb/conf/mongodb.conf

关闭mongodb

mongod -f /mongodb/conf/mongodb.conf --shutdown

11、使用YAML文件启动mongodb

修改配置文件

vim /mongodb/conf/mongodb.conf

添加:

systemLog:

   destination: file

   path: "/mongodb/log/mongodb.log"

   logAppend: true

storage:

   journal:

      enabled: true

   dbPath: "/mongodb/data/"

processManagement:

   fork: true

net:

   port: 27017

   bindIp: 192.168.8.5,127.0.0.1

启动mongodb

mongod -f /mongodb/conf/mongodb.conf

关闭mongodb方式

mongod -f /mongodb/conf/mongodb.conf --shutdown

mongodb常用基本操作

  • mongodb默认存在的库

show databases

  • 命令种类

数据库对象(库(database),表(collection),行(document))

db.命令:

DB级别命令

db        当前在的库

db.[TAB]  类似于linux中的tab功能

db.help() db级别的命令使用帮助

collection级别操作:

db.Collection_name.xxx

document级别操作:

db.t1.insert()

复制集有关(replication set):

rs.

分片集群(sharding cluster)

sh.

  • 帮助

help

KEYWORDS.help()

KEYWORDS.[TAB]

show

use

db.help()

db.a.help()

rs.help()

sh.help()

  • 常用操作

查看当前db版本

db.version()

显示当前数据库

db

db.getName()

查询所有数据库

show dbs

注意:可以use到任何一个不存在的数据库里面,如果在这个不存在的数据库中存放数据,这个库就会自动创建

切换数据库

use local

查看所有的collection

show tables

显示当前数据库状态

db.stats()

查看当前数据库的连接机器地址

db.getMongo()

指定数据库进行连接

默认连接本机test数据库

  • mongodb对象操作

mongo         mysql

库    ----->  库

集合  ----->  表

文档  ----->  数据行

1、库的操作

创建数据库

当use的时候,系统就会自动创建一个数据库,如果use之后没有创建任何集合,系统就会删除这个数据库。

删除数据库

如果没有选择任何数据库,会删除默认的test数据库

删除test数据库

show dbs

2、集合的操作

创建集合格式:db.createCollection(name, options)

参数说明:

name: 要创建的集合名称

options: 可选参数, 指定有关内存大小及索引的选项

capped值为true,则创建固定集合

autoIndexId 值为true,自动在 _id 字段创建索引

size 为固定集合指定一个最大值(以字节计)

max 指定固定集合中包含文档的最大数量

方法1:

use app

db.createCollection('a')

db.createCollection('b')

查看当前数据下的所有集合

show collections

db.getCollectionNames()

方法2:

当插入一个文档的时候,一个集合就会自动创建

use hehe

db.haha.insert({id : "1021" ,name : "zhssn" ,age : "22" ,gender : "female",address : "sz"})

db.haha.insert({id : "101" ,name : "zhangsan" ,age : "18" ,gender : "male"})

查询数据

db.haha.find()

/ObjectId("677cb502871c022a3c9614f0"):默认创建了索引列

列出指定行

db.haha.find({id:"101"}).pretty()

列出所有行

db.haha.find().pretty()

删除集合

db.a.drop()

重命名集合

把b改名为log

db.b.renameCollection("log")

批量插入数据

for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mysql","age":6,"date":new

Date()})}

数据查询语句

查询集合中的记录数

db.log.find()   查询所有记录

注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。

设置每页显示数据的大小

DBQuery.shellBatchSize=50   每页显示50条记录

db.log.findOne()    查看第一条记录

db.log.count()     查询总的记录数

删除集合中的记录数

db.log.deleteOne({"uid":0})    删除满足条件的文档

db.log.remove({})    删除集合中所有记录

for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mysql","age":6,"date":new

Date()})}

db.log.distinct("name")    查询去掉当前集合中莫列的重复数据

查看集合存储信息

db.log.stats()    查看集合的状态

db.log.dataSize()    查看集合中数据的原始大小

db.log.totalIndexSize()    查看集合中索引数据的原始大小

db.log.storageSize()    查看集合中数据压缩存储的大小

db.log.totalSize()    查看集合中索引+数据压缩存储之后的大小

3、扩展集合文档命令

(1)创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个

db.createCollection("mycol",{ capped : true, autoIndexId : true, size : 6142800, max : 10000 })

(2)变量插入数据

创建col集合

db.col.insert({title: 'MongoDB',

description: 'Nosql数据库',

by: '教程',

url: 'http://www.test.com',

tags: ['mongodb','database','NoSQL'],

likes: 100

})

show tables

db.col.find()

定义为一个变量,再插入数据

document=({title: 'MongoDB',

description: 'Nosql数据库',

by: '教程',

url: 'http://www.test.com',

tags: ['mongodb', 'database', 'NoSQL'],

likes: 100

});

db.col.insert(document)

db.col.find()

(3)单、多行数据插入

语法:

db.collection.insertOne():    向指定集合中插入一条文档数据

db.collection.insertMany():    向指定集合中插入多条文档数据

插入单条数据

var document = db.collection.insertOne({"a": 3})

document

插入多条数据

var res = db.collection.insertMany([{"b": 3}, {'c': 4}])

res

(4)更新文档

集合 col 中插入如下数据

db.col.find()

如果没有两条数据则执行下面语句插入数据,做测试表

db.col.insert({

title: 'MongoDB', 

description: 'Nosql数据库',

by: '教程',

url: 'http://www.test.com',

tags: ['mongodb', 'database', 'NoSQL'],

likes: 100

})

update() 方法来更新标题(title)

db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB 教程'}})

查看更新结果

db.col.find().pretty()

以上update语句只会修改第一条发现的文档,修改多条需要设置 multi 参数为 true

db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB教程'}},{multi:true})

db.col.find().pretty()

(5)删除行

db.collection.find()

推荐使用 deleteOne() 和 deleteMany()

删除匹配条件一个文档

db.collection.deleteOne({"c":4})

删除匹配条件所有文档

db.collection.deleteMany({"b":3})

db.collection.find()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值