MongoDB安装部署及基本操作

MongoDB

第1章 数据库管理系统

1.1 什么是数据?

数据是指未经过处理的原始记录,一般而言,数据缺乏组织及分类,无法明确的表达事物代表的意义,数据描述事物可以是描述事物的符号记录,是可定义为意义的实体,设计事物的存在形式,是关于事件之一组离散且客观的事实藐视,是构成讯息和知识的原始材料

1.2 什么是数据库管理系统?

?  数据库管理系统,是一种针对对象数据库,为管理数据库而设计的大型电脑软件管理系统,

?  具有代表性的数据管理系统有: Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等,通常数据库管理员会使用数据库管理系统来创建数据库系统

?  现代DBMS使用不同的数据库模型追踪实体,属性和关系,在个人电脑,大型计算机和主机上应用最广泛的数据库管理系统是关系型DBMS,在关系型数据库模型中,用二维表格表示数据库中的数据,这些表格称为关系

?  数据库管理系统分为两大类:RDBMS;Nosql

第2章 NoSQL是什么?

2.1 NoSQL简介:

?  nosql是对不同于传统关系型数据库的数据库管理系统的统称,

?  两者存在许多显著不同点,其中最重要的就是nosql不使用sql作为查询语言,其数据存储可以不需要固定的表格模式,也经常会避免使用sql的join操作,一般有水平可扩展的特征

?  NoSQL一词最早出现于1998,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

2.2 nosql数据库四大家族:


存储类型


NoSQL


键值存储


最终一致性键值存储


Cassandra、Dynamo、Riak、Hibari、Virtuoso、Voldemort


内存键值存储


Memcached、Redis、Oracle Coherence、NCache、 Hazelcast、Tuple   space、Velocity


持久化键值存储


BigTable、LevelDB、Tokyo Cabinet、Tarantool、TreapDB、Tuple space


文档存储


MongoDB、CouchDB、SimpleDB、 Terrastore 、 BaseX 、Clusterpoint 、 Riak、No2DB


图存储


FlockDB、DEX、Neo4J、AllegroGraph、InfiniteGraph、OrientDB、Pregel


列存储


Hbase、Cassandra、Hypertable

2.3 NoSQL的优势:

?  高可扩展性,分布式计算,没有复杂的关系,低成本

?  架构灵活,半结构化数据

2.4 nosql与RDBMS对比:


NoSQL


RDBMS


代表着不仅仅是SQL

没有声明性查询语言

没有预定义的模式

 - 值对存储,列存储,文档存储,图形数据库

最终一致性,而非ACID属性

非结构化和不可预知的数据

CAP定理

高性能,高可用性和可伸缩性


高度组织化结构化数据

结构化查询语言(SQL (SQL)

数据和关系都存储在单独的表中。

数据操纵语言,数据定义语言

严格的一致性

基础事务

第3章 MongoDB简介:

3.1 MongoDB的三大特性:

1.1.1 还支持以下特点:

 二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。

1.1.2 缺点,例如:

?    多表关联: 仅仅支持Left Outer Join

?    SQL 语句支持: 查询为主,部分支持

?    多表原子事务: 不支持

?    多文档原子事务:不支持

?    16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳

1.2 关系型数据库与MongoDB对比:

?  在传统的关系型数据库中,存储方式以表的形式存放,而在MongoDB中,以文档的形式存在:

?  数据库中的对应关系,以存储形式说明:

1.1.1 MongoDB与sql结构对比详解:


SQL Terms/Concepts


MongoDB Terms/Concepts


database


database


table


collection


row


document or BSON   document


column


field


index


index


table joins


embedded   documents and linking


primary key

Specify any unique column or

column combination as

primary key.


primary key

In MongoDB, the   primary key is

automatically   set to the _id field.


aggregation (e.g. group by)


aggregation   pipeline

See the SQL to   Aggregation Mapping

Chart.

1.2 MongoDB数据存储格式:

?  JSON格式:

JSON数据格式与语言无关脱胎于JavaScript,但目前很多编程语言都支持json格式数据的生成和解析,json的官方mime类型是application/json,文件扩展名是.json

MongoDB使用json文档存储记录

json数据库语言可以容易被解析

web应用大量使用,name-value配对

?  BSON格式:

BSON是由10gen开发的数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式,BSON基于JSON格式,选择json进行改进的原因是JSON通用性以及JSON放入schemaless特性

二进制的JSON,JSON文档的二进制编码存储格式

BSON有JSON没有data和bindata

MongoDB中document以BSON形式存放

例如:

db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});

1.1 MongoDB的优势:

开源产品

功能丰富:JSON文档模式,动态的数据模式,二级索引强大,自动分片,水平扩展,自动复制,高可用,文本搜索,企业级安全聚合框架MapReduce,大文件存储GirdFS

1.1.1 高可用复制集群:

自动复制和故障自动切换

多数据中心支持滚动维护无需关机支持最多50个成员

1.1.1 水平扩展:

这种方式hi目前架构上的主流形式,指的是增加服务器数量来对系统扩容,在这样的架构下,单台服务器的配置不会很高,可能是配置比较低,很廉价的PC,每台机器承载着系统的一个子集,所有机器服务器组成的集群会比单体服务器提供更强大的高效的系统容载量

这样的问题是系统架构会比单体服务器复杂,搭建,维护都要求更高的技术背景分片集群架构如图:

1.1 MongoDB使用场景:

?  网站数据,缓存等大尺寸,低价值的数据

?  在高伸缩性的场景,用于对象及JSON数据的存储

1.2 什么时候该选择MongoDB呢?

?  数据量有亿万级或者需要不断扩容的

?  需要2000-3000以上的每秒读写

?  新应用,需求不定,数据模型无法确定

?  需要整合多个外部数据源

?  系统徐亚99.999%的高可用

?  系统需要大量地理位置查询

?  系统需要提供最小的latency

?  我要管理的对象小于10

第2章 MongoDB部署:

2.1 下载地址:

?    MongoDB官网:https://www.mongodb.com/

?     CentOS6.X版本软件下载地址:https://www.mongodb.org/dl/linux/x86_64-rhel62

2.2 安装前的准备:

检查该版本是否支持你的操作系统

?  更多详情查看: https://docs.mongodb.com/manual/installation/

1.1.1 在root用户下关闭大页内存:

[[email protected] tools]# cat /etc/rc.local

#!/bin/bash

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

其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

1.1.2 为什么要关闭呢?

Transparent Huge Pages (THP) is a Linux memory management system

that reduces the overhead of Translation Lookaside Buffer (TLB)

lookups on machines with large amounts of memory by using larger memory pages.

However, database workloads often perform poorly with THP,

because they tend to have sparse rather than contiguous memory access patterns.

You should disable THP on Linux machines to ensure best performance with MongoDB.

1.2 MongoDB安装:

下载软件:

wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.8.tgz

创建用户并修改密码:

groupadd -g 800 mongod

useradd  -u 801 -g mongod  mongod

echo 123456 |passwd --stdin  mongod

创建目录结构:

mkdir -p /mongodb/bin

mkdir -p /mongodb/conf

mkdir -p /mongodb/log

mkdir -p /mongodb/data

解压软件并上传到指定位置:

tar xf mongodb-linux-x86_64-3.2.8.tgz

cd /server/tools/mongodb-linux-x86_64-3.2.8

cp * /mongodb/bin/

配置文件内容:

systemLog:

destination: file

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

logAppend: true

storage:

journal:

enabled: true

dbPath: "/mongodb/data"

processManagement:

fork: true

net:

port: 27017

security:

authorization: enabled

修改程序目录属主:

chown -R mongod.mongod /mongodb/

设置用户环境变量:

su - mongod

vi .bash_profile

export PATH=/mongodb/bin:$PATH

source .bash_profile

第2章 管理MongoDB:

2.1 启动MongoDB:

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

2.2 参数说明:


参数


参数说明


--dbpath    


数据存放路径


--logpath   


日志文件路径


--logappend 


日志输出方式


--port      


启用端口号


--fork      


在后台运行


--auth      


是否需要验证权限登录(用户名和密码)


--bind_ip   


限制访问的ip


--shutdown


关闭数据库

2.3 登录数据库:

mongo

MongoDB shell version: 3.2.8

connecting to: test

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

http://docs.mongodb.org/

Questions? Try the support group

http://groups.google.com/group/mongodb-user

>

>

2.3.1 配置文件:

[[email protected] conf]$ vim mongodb.conf

logpath=/mongodb/log/mongodb.log

dbpath=/mongodb/data

port=27017

logappend=1

fork=1

[[email protected] conf]$ pkill mongod

[[email protected] conf]$ mongod -f /mongodb/conf/mongodb.conf

about to fork child process, waiting until server is ready for connections.

forked process: 1562

child process started successfully, parent exiting

2.3.2 yaml格式配置文件:

systemLog:

destination: file

path: "/application/mongodb/log/mongod.log"

logAppend: true

storage:

journal:

enabled: true

dbPath: "/application/mongodb/data"

processManagement:

fork: true

net:

port: 27017

2.4 MongoDB多种关闭方式:

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

或者登陆到mongodb中,use到admin库下:

admin> db.shutdownServer()

admin> db.adminCommand({shutdown:1})

第3章 MongoDB基本操作:

3.1 常用的命令种类:

db ----> 数据库和数据库对象管理类

rs. ----> 复制集有关管理命令

show ----> 查询数据库一些基本状态

sh. ----> 集群有关管理类命令

3.1.1 在客户端指定数据库进行连接(默认连接本机的test库)

[[email protected] conf]$ mongo 10.0.0.18/admin

MongoDB shell version: 3.2.8

connecting to: 10.0.0.18/admin

>

3.1.2 切库:

> use test

switched to db test

3.1.3 查看当前数据库版本:

> db.version()

3.2.8

3.1.4 显示当前数据库:

> db

test

> db.getName()

test

3.1.5 查看当前数据库状态:

> db.stats()

{

"db" : "jiang",

"collections" : 1,

"objects" : 0,

"avgObjSize" : 0,

"dataSize" : 0,

"storageSize" : 4096,

"numExtents" : 0,

"indexes" : 1,

"indexSize" : 4096,

"ok" : 1

}

3.1.6 显示所有数据库:

> show databases

jiang  0.000GB

local  0.000GB

> show dbs

jiang  0.000GB

local  0.000GB

第4章 数据管理:

4.1 创建集合(相当于create table)

方法一:

> db.createCollection('t1')

{ "ok" : 1 }

> show tables

t1

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

> db.t2.insert({name:"daya"})

WriteResult({ "nInserted" : 1 })

> show tables

t1

t2

4.2 查看创建好的合集(库中的表):

> db.getCollectionNames()

[ "t1", "t2" ]

4.3 查看表中内容:

> db.t2.find()

{ "_id" : ObjectId("5ad69e4014cea9ca81c9ae44"), "name" : "daya" }

4.4 批量插入一万行数据:

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

WriteResult({ "nInserted" : 1 })

4.5 查询集合中有多少行数据:

> db.log.find().count()

10000

4.6 删除所有合集:

> db.log.remove({})

WriteResult({ "nRemoved" : 10000 })

4.7 查询集合存储信息:

> db.log.stats()          # 查看数据状态

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

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

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

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

第5章 MongoDB用户管理:

MongoDB数据库默认是没有用户名及密码的,即无权限访问控制,为了方便数据库的管理和安全,需要创建数据库用户

5.1 用户的权限:

用户中权限的说明


权限


说明


Read                


允许用户读取指定数据库


readWrite           


允许用户读写指定数据库


dbAdmin             


允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile


userAdmin           


允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户


clusterAdmin        


只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。


readAnyDatabase     


只在admin数据库中可用,赋予用户所有数据库的读权限


readWriteAnyDatabase


只在admin数据库中可用,赋予用户所有数据库的读写权限


userAdminAnyDatabase


只在admin数据库中可用,赋予用户所有数据库的userAdmin权限


dbAdminAnyDatabase  


只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。


root                


只在admin数据库中可用。超级账号,超级权限

5.2 用户创建语法:

{

user: "<name>",

pwd: "<cleartext password>",

customData: { <any information> },

roles: [

{ role: "<role>",

db: "<database>" } | "<role>",

...

]

}

user字段:用户的名字;

pwd字段:用户的密码;

cusomData字段:为任意内容,例如可以为用户全名介绍;

roles字段:指定用户的角色,可以用一个空数组给新用户设定空角色;

roles 字段:可以指定内置角色和用户定义的角色。

5.3 创建超级管理员用户:

> db.createUser(

...   {

...     user: "root",

...     pwd: "root",

...     roles: [ { role: "root", db: "admin" } ]

...   }

... )

5.3.1 注意:

1.      创建管理员角色用户的时候,必须到admin下创建

2.      删除的时候也要到响应的库下操作

5.3.2 查看创建完成的用户:

> show users

{

"_id" : "admin.root",

"user" : "root",

"db" : "admin",

"roles" : [

{

"role" : "root",

"db" : "admin"

}

]

}

5.3.3 验证用户:

> db.auth('root', 'root')

1

5.3.4 用户创建完成后在配置文件中开启用户验证:

cat >>/mongodb/conf/mongodb.conf<<-'EOF'

security:

authorization: enabled

EOF

5.3.5 重启数据库

mongod -f /mongodb/conf/mongodb.conf

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

5.3.6 登录数据库:

方法一:

mongo 10.0.0.18/admin -uroot –proot

方法二:

mongo 10.0.0.18/admin

> db.auth('root', 'root')

1

5.4 自定义数据库

5.4.1 创建app数据库的管理员

> use app

switched to db app

> db.createUser(

...   {

...     user: "admin",

...     pwd: "admin",

...     roles: [ { role: "dbAdmin", db: "app" } ]

...   }

... )

Successfully added user: {

"user" : "admin",

"roles" : [

{

"role" : "dbAdmin",

"db" : "app"

}

]

}

> db.auth('admin','admin')

1

5.4.2 创建zabbix用户,可读可写权限

> db.createUser(

... {

...   user: "zabbix",

...   pwd: "zabbix",

...   roles: ["readWrite"]

... }

... )

Successfully added user: { "user" : "zabbix", "roles" : [ "readWrite" ] }

> db.auth('zabbix', 'zabbix')

1

5.4.3 创建一个zabbix库的只读用户test1用户

> db.createUser(

... {

...   user: "test1",

...   pwd: "test1",

...   roles: ["read"]

... }

... )

5.4.4 删除用户:

> use zabbix

switched to db zabbix

> db.dropUser("test1")

true

原文地址:http://blog.51cto.com/13520772/2110242

时间: 2024-11-08 23:54:40

MongoDB安装部署及基本操作的相关文章

MongoDB安装部署(一)

前言 MongoDB是一个由C++语言编写的基于分布式文件存储的数据库,是当前NoSQL数据库中比较热门的一种,旨在为Web应用提供可扩展的高性能数据存储解决方案. MongoDB 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.支持的数据结构非常松散,因此可以存储比较复杂的数据类型.最大的特点是其支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

MongoDB 安装和即基本操作

http://www.mongodb.org/ Agile and Scalable MongoDB (from "humongous") is an open-source document database, and the leading NoSQL database. Written in C++, MongoDB features: Document-Oriented Storage » JSON-style documents with dynamic schemas of

Mongodb安装部署及命令简介

1.下载软件: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.0.3.tgz 2.解压安装: tar -zxvf mongodb-linux-x86_64-rhel62-3.0.3.tgz mv mongodb-linux-x86_64-rhel62-3.0.3 /usr/local/mongodb/ cd /usr/local/mongodb/ mkdir -p /data0/mongodb/db mkd

linux上MongoDB安装部署

①下载安装包 mongodb-linux-x86_64-rhel62-3.6.3.tgz ②解压: tar zxvf mongodb-linux-x86_64-rhel62-3.6.3.tgz ③重命名:mv mongodb-linux-x86_64-rhel62-3.6.3/ mongodb-3.6.3 ④进入目录:cd mongodb-3.6.3/ ⑤新建目录: mkdir conf (启动配置文件) mkdir logs(日志文件) mkdir data(数据存放文件) 此时目录结构如下图

MongoDB部署及基本操作

MongoDB 第1章 MongoDB部署: 1.1 下载地址: ?  MongoDB官网:https://www.mongodb.com/ ?   CentOS6.X版本软件下载地址:https://www.mongodb.org/dl/linux/x86_64-rhel62 1.2 安装前的准备: 检查该版本是否支持你的操作系统 ?  更多详情查看: https://docs.mongodb.com/manual/installation/ 1.1.1 在root用户下关闭大页内存: [[e

MongoDB在Windows中的安装部署

MongoDB在Windows中的安装部署 测试环境: Microsoft Windows 7 (旗舰版 64-bit) MongoDB 3.0.2 (Windows 64-bit 2008 R2+) 安装文件: mongodb-win32-x86_64-2008plus-ssl-3.0.2-signed.msi 提示: 1.MongoDB不支持Windows XP及以下版本 2.安装文件下载地址http://www.mongodb.org/downloads 3.英文安装手册地址http://

Mongodb简介及安装部署配置

1.Mongodb简介及安装部署 Mongodb 逻辑结构:Mongodb 逻辑结构 MySQL逻辑结构库database 库集合(collection) 表文档(document) 数据行 2.安装前准备(1)redhat或cnetos6.2以上系统(2)系统开发包完整(3)ip地址和hosts文件解析正常(4)iptables防火墙&SElinux关闭(5)关闭大页内存机制############################################################

Redis笔记系列(二)——Redis安装部署与维护详解

本文介绍Redis2.8的安装部署和维护方法. Redis在linux上的安装 步骤1: 首先从官网下在redis正式版的压缩包redis-2.8.19.tar.gz http://download.redis.io/releases/redis-2.8.19.tar.gz 步骤2:编译源程序: tar zxvf redis-2.8.19.tar.gz [[email protected] Downloads]$ tar zxvf redis-2.8.19.tar.gz [[email prot

openstack-M版安装部署

[openstack信息简介] Openstack项目是一个开源的云计算平台,它为广大云平台提供了可大规模扩展的平台,全世界的云计算技术人员创造了这个项目,通过一组相互关联的服务来提供了Iaas基础解决方案,每一个服务都通过提供自身的API来提供服务,个人或者企业完全可以根据自身的需求来安装一部分或者全部的服务. 通过下面一张表格来描述一下当前openstack的各个组件及功能. Service Project name Description Dashboard Horizon 通过提供了we