Mongodb简单介绍

Mongodb

MongoDB 是一个基于分布式文件存储的数据库。由C++ 语言编写。旨在为WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

关系型数据库:原子性、一致性、独立性、持久性。

分布式计算:可靠性(容错)、可扩展性、资源共享、灵活性、更快的速度、开放系统、更高的性能。

CAP定理:对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据CAP 原理将NoSQL 数据库分成了满足CA 原则、满足CP 原则和满足AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

数据库分类:

1、列存储:hbase、cassandra、hypertable

2、文档存储:mongodb、couchdb

3、键值对存储:redis、mencachedb、berkeleydb

4、图存储:neo4j、flockdb

5、对象存储:db4o、versant

6、Xml数据库:basex

数据库启动:mongodb --config=/opt/mongodb-3.4.0/mongo.conf

数据库关闭:ps -ef | grep mongo.conf | grep -v grep | awk ‘{print $2}’| xargs kill -9

连接数据库:mongo  -port  27017

URL连接格式:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

连接replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。mongodb://host1,host2,host3/?slaveOk=true

show dbs;  查询所有数据库

use dbname;   使用数据库,若不存在,则创建

db;  显示当前使用的数据库

db.dbname.insert({“name”:”zhangsan”});   在dbname中插入数据,若数据库不存在,则会创建

db.dropDatabase()     删除正在使用的数据库

db.createCollection(name,option).   创建集合

db.collectionname.drop() 删除集合

use dbname; show collections;db.setname.drop()  删除集合

use dbname;show tables;db.setname.drop().  删除数据库dbname中的集合setname

db.collectionname.insert(document).  在集合中插入文档

db.collectionname.find(). 查询集合中已经插入的文档

db.collectionname.updata(). 更新文档

db.collectionname.remove({‘title’:’yes’}) 可删除,但是不会真正释放空间,需要继续执行db.repairDatabase()来回收磁盘空间

db.collection.deleteMany({…}).   删除集合下的满足…的文档

查询文档:

db.col.find({“by”:”zhangsan”,”title”:”mongo”}).pretty()  查询by为zhangsan,并且title为mongo的数据

db.col.find({$or:[{“by”:”zhangsan”},{”title”:”mongo”}]}).pretty()  查询by为zhangsan,或者title为mongo的数据

条件操作符:

$gt 大于

$lt 小于

$gte 大于等于

$lte 小于等于

db.col.find({likes:{$gte:100}}). 查找likes大于等于100的数据

db.col.find({likes:{$gte:100,$lt:200}})  查找likes大于等于100且小于200的数据

$type 数据的类型,如double为1,string为2

db.col.find({“title”:{$type:2}}). 查找title类型为string的数据

db.col.find({“title”:{$type:2}}).limit(3). 查找title类型为string的数据且只显示3条

db.col.find({“title”:{$type:2}}).limit(1).skip(1)查找title类型为string的数据且显示第二条

db.col.find({“title”:{$type:2}}).sort({“likes”:-1}).  1:升序排列,-1:降序排列

创建索引:

db.col.createIndex({“title”:1,”likes”:-1})  1为升序索引,-1为降序索引

db.col.getIndexes().   查看索引

db.col.totalIndexSize().  查看索引大小

db.col.dropIndexes()   删除所有索引 

db.col.dropIndex(“索引名称”)  删除指定索引

mongodb主从复制:

一主一从,一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

主节点配置:

dbpath=/opt/mongodb-3.4.0/mongo.conf

logpath=/opt/mongodb-3.4.0/log.log

port=27017

bind_ip=127.0.0.1

master=true

从节点配置:

dbpath=/opt/mongodb-3.4.0/mongo.conf

logpath=/opt/mongodb-3.4.0/log.log

port=28018

bind_ip=127.0.0.1

slave=true

source=127.0.0.1:27017

分别启动两个mongodb数据库实例,在主库上做些操作,观看从库状态,若提示slaveok=false,则执行rs.slaveOk(),再查询。

查看主节点信息:db.printReplicationInfo();

查看从节点信息:db.printSlave ReplicationInfo();

Mongodb-replica set副本集:自带故障转移功能的主从复制

主节点配置:

dbpath=/data/mongodb
logpath=/opt/mongodb-3.4.0/logs/mongodb.log
pidfilepath=/data/mongodb/master.pid
logappend=true
replSet=test_set
bind_ip=10.148.0.39
port = 28018
fork = true

从节点配置:

dbpath=/data/mongodb
logpath=/opt/mongodb-3.4.0/logs/mongodb.log
pidfilepath=/data/mongodb/slave.pid
logappend=true
replSet=test_set
bind_ip=10.148.0.43
port = 28018
fork = true

在启动参数中加入replSet,然后在任意一台中rs.initiate()设置成员。rs.status()查看状态。

连接到mongodb里面

>cfg={_id:'test',members:[{_id:0,host:'127.0.0.1:28018'},{_id:1,host:'127.0.0.1:29019'}]};

>rs.initiate(cfg);

>rs.status();

rs.add(…)添加节点。

rs.remove(…)移除节点

Mongodb-sharding切片:

Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担

Config server:mongod实例,存储了整个ClusterMetadata,其中包括chunk信息。

Mongos:前端路由router,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用

1、设置sharding副本集rs0

nohup mongod --port 27031 --dbpath=/data/db4 --logpath=/data/log/rs1-2.log --logappend --fork--shardsvr --replSet=rs1

rs.initiate(…)

 

2、设置sharding副本集rs1

3、创建config副本集conf

nohup mongod --port 27100 --dbpath=/data/conf1 --logpath=/data/log/conf-1.log --logappend --fork --configsvr--replSet=conf &

rs.initiate(…)

4、创建route

nohup mongos--port 40000 --configdbconf/localhost:27100,localhost:27101 --fork --logpath=/data/log/route.log --logappend &

设置分片

mongo localhost:40000> use admin

> db.runCommand({ addshard: 'rs0/localhost:27020,localhost:27021'})

> db.runCommand({ addshard: 'rs1/localhost:27030,localhost:27031'})

> db.runCommand({ enablesharding: 'test'})

> db.runCommand({ shardcollection: 'test.user', key: {name: 1}})

Mongodb备份恢复:

mongodump  -h dbhost [-d dbname] [-o backpath] 备份

mongorestore -h<hostname><:port> -d dbname <path>

mongoexport -d dbname -c collectionName -o fileName   #默认是json格式

mongoimport [--port 28018] -d dbname -c clollectionName --file fileName  

mongodb监控:

mongostat

mongotop

原文地址:https://www.cnblogs.com/Christine-ting/p/10482381.html