====MongoDB简介====
*MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
*MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
*Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
====主要功能特性====
MongoDB 的设计目标是高性能、可扩展、易部署、易使用,存储数据非常方便。
其主要功能特性如下:
(1)面向集合存储,容易存储对象类型的数据。在MongoDB 中数据被分组存储在集合中,集合类似RDBMS中的表,一个集合中可以存储无限多的文档。
(2)模式自由,采用无模式结构存储。在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征。
(3)支持完全索引,可以在任意属性上建立索引,包含内部对象。MongoDB的索引和RDBMS 的索引基本一样,可以在指定属性、内部对象上创建索引以提高查询的速度。除此之外,MongoDB 还提供创建基于地理空间的索引的能力。
(4)支持查询。MongoDB 支持丰富的查询操作,MongoDB 几乎支持SQL中的大部分查询。
(5)强大的聚合工具。MongoDB 除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务。
(6)支持复制和数据恢复。MongoDB 支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失。
(7)使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,可以保存任何类型的数据对象。
(8)自动处理分片,以支持云计算层次的扩展。MongoDB 支持集群自动切分数据,对数据进行分片可以使集群存储更多的数据,实现更大的负载,也能保证存储的负载均衡。
(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++语言的驱动程序,MongoDB 提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问MongoDB 数据库。
(10)文件存储格式为BSON(JSON 的一种扩展)。BSON 是对二进制格式的JSON 的简称,BSON 支持文档和数组的嵌套。
(11)可以通过网络访问。可以通过网络远程访问MongoDB 数据库。
//上述解释:
================================================================================
//MongoDB已经在多个站点部署
====其主要场景如下====:
1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含//对MapReduce引擎的内置支持。
====不适用的场景如下====:
1)要求高度事务性的系统。
2)传统的商业智能应用。
3)复杂的跨文档(表)级联查询。
====================***********************===================================
安装与部署:
--------------配置YUM源仓库---------------------------------
vi /etc/yum.repos.d/mongo.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
-----------------安装MongoDB-------------------------------
yum install -y mongodb-org
vi /etc/mongod.conf
bindIp: 0.0.0.0 #监听地址
port: 27017 #监听端口
systemctl start mongod.service
netstat -anpt | grep 27017
/usr/bin/mongo
db.version()
show dbs;
db.getMongo() //查看当前数据库机器的连接地址
----------------开启多实例----------------------------------
cp -p /etc/mongod.conf /etc/mongod2.conf
vi /etc/mongod2.conf
path: /data/mongodb/mongod2.log
dbPath: /data/mongodb/mongo
port: 27018
mkdir -p /data/mongodb/
cd /data/mongodb/
mkdir mongo
touch mongod2.log
chmod 777 mongod2.log
mongod -f /etc/mongod2.conf
mongo --port 27018
netstat -ntap
--------------------基本操作-------------------------------
> use mydb; //不存在会创建,不建立集合又会删除
> db.createCollection('users')
> db.users.insert({"id":1,"name":"zhangsan","hobby":["game","talk","football"]})
> db.users.find()
批量插入,用循环:
for(var i=1;i<=100;i++)db.users.insert({"id":i,"name":"jack"+i})
查看其中某一条:
db.users.findOne({"id":10})
> a=db.users.findOne({"id":1}) //查找指定记录并赋予别名a
> typeof(a.id) //查看属性类型
> typeof(a.name)
> typeof(a.hobby)
> db.users.update({"id":10},{$set:{"name":"tom"}}) //更改
> show collections //查看集合(show tables也行!)
> db.a.drop() //删除集合a是集合名
> db.dropDatabase() //删除数据库*(先进库)
> for(var i=1;i<=100;i++)db.users.insert({"id":i,"name":"jack"+i})
> db.users.count() --统计共有多少条目
显示
100
-----------------导入导出-------------------------------
导出操作
[root@bogon ~]# mongoexport -d kgc -c users -o /opt/users.json
导入操作
[root@bogon opt]# mongoimport -d kgc -c user1 --file users.json
条件操作
[root@bogon opt]# mongoexport -d kgc -c user1 -q '{"id":{"$eq":10}}' -o /opt/top10.json
------------------备份与恢复--------------------------
[root@bogon opt]# mkdir /backup
[root@bogon opt]# mongodump -d kgc -o /backup/ #备份
[root@bogon backup]# mongorestore -d kgc2 --dir=/backup/kgc #恢复
------------------复制数据库---------------------------
db.copyDatabase("kgc","kgc2")
-----------------克隆集合-------------------------------
mongo --port 27018
db.runCommand({"cloneCollection":"kgc.users","from":"192.168.235.190:27017"})
------------------创建管理用户------------------------------
> use admin
> db.createUser({"user":"root","pwd":"123","roles":["root"]})
> db.auth("root","123")
------------------进程管理----------------------------------
> db.currentOp()
显示
"opid" : 337,
> db.killOp(337) //释放当前进程,重新加载刷新