NoSQLMongoDB数据库详解

3.1.1 安装前准备

01.备选Redhat或Centos6.2以上系统

02.种类开发包完整

03.关闭iptables及Selinux

04.配置IP地址和hosts解析

05.关闭hugepage大页内存

06.成立所需用户mongod(非root用户)

07.创立所需目录,并授权

3.1.1.1  具体步骤

1 [root@mongodb ~]# cat /etc/redhat-release
2 CentOS release 6.9 (Final)
3 
4 [root@mongodb ~]# uname -r
5 2.6.32-696.el6.x86_64
6 
7 [root@mongodb ~]# uname -m
8 x86_64

 

1 /etc/init.d/iptables status
2 getenforce
3 ip a
4 echo "10.0.0.51 mongodb" >>/etc/hosts
5 
6 /etc/init.d/mysqld stop   #若存在mysql程序需提前关闭以防止程序冲突

关闭大页内存机制以拉长品质

1 vim /etc/rc.local
2 
3 #以root用户身份在最后一行添加如下代码,重启生效
4 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
5   echo never > /sys/kernel/mm/transparent_hugepage/enabled
6 fi
7 if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
8    echo never > /sys/kernel/mm/transparent_hugepage/defrag
9 fi

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

2.1.1 数据存储格式

01. JSON

MongoDB使用JSON(JavaScript ObjectNotation)文档存储记录

JSON数据库语句可以简单被解析

Web应用大批量采用

NAME-VALUE配对

02. BSON

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

BSON有JSON没有的Date和BinData

MongoDB中document以BSON方式存放

数据格式灵活-文档里嵌入文档

1 {
2 _id: ObjectID("1"),
3 username: “Silence”,
4 regDate: “10-10-2015”,
5 scores: {
6 math: "80",
7 english: "200"
8   }
9 }

2.1 MongoDB特性

NoSQL,即最像关系型数据库的NoSQL

NoSQL 1

 

MongoDB与RDBMS的最大分别:

尚未固定的行列协会数据结构,即无需将差异类的数量放入多张表中确立对应提到并分别存储其数据,而是一贯放入一份文档举行仓储

3.2.4.2  自带方式

1 use admin
2 
3 admin> db.adminCommand({shutdown:1})
4 或
5 $ mongod -f mongodb.conf --shutdown
6 killing process with pid: 1621

注意:

01.mongod进程收到SIGINT或SIGTERM信号,会做一些拍卖

02.切忌使用kill -9

1.2.1 NoSQL数据库四大家族

列存储:Hbase

键值(Key-Value)存储:Redis

图像存储:Neo4J

文档存储:MongoDB

3.2.1 mongodb启动参数详解

mongod参数

参数说明

–dbpath

数据存放路径

–logpath

日志文件路径

–logappend

日志输出方式->以追加模式进行记录,默认覆盖记录

–port

启用端口号

–fork

以后台守护进程的方式启动

–auth

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

–bind_ip

限制访问的ip

 

07.编辑配置文件->以读取配置文件的不二法门来启动数据库

1 vim /application/mongodb/conf/mongod.conf
2 
3 dbpath=/application/mongodb/data
4 logptah=/application/mongodb/log/mongodb.log
5 port=27017
6 logappend=1
7 fork=1

08.点名安顿文件启动/关闭mongod

1 mongod
-f /application/mongodb/conf/mongod.conf
#启航数量库

2 mongod
-f /application/mongodb/conf/mongod.conf shutdown #关闭 

09.登录mongodb

1 mongo
2 
3 ###此时已登陆mongodb系统,以下为提示信息###
4 MongoDB shell version: 3.2.8
5 connecting to: test
6 > 

说明:

01.首先登录时默认提示版本号消息及连接数据库test,不过在MongoDB中test数据库默许并不设有

02.对此3.2以上版本默许唯有一个admin数据库,且无需提前创造,不设有的库也可以正常use

2.3.3 MongoDB与RDBMS数据结构逻辑相比较

MongoDB

VS

RDBMS

集合Collection

->

表Table

文档Document

->

行Row

数据库Database

 

数据库Database

索引值Index

->

索引值Index

嵌入式文件Embedded Document

->

合并Join

引用Reference

->

外键Foreign Key

分片Shard

->

分区Partition

3.2.2 启动时报错:”WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files”的近乎错误

报错原因:rlimits设置过小,其设置大致不可能满意MongoDB运行所需的纤维条件,会促成它运行缓慢甚至出现不可见的荒唐

杀鸡取卵思路:

01.查看当前的MongoDB进度音讯

1 ps -ef | grep mongod
2 
3 #结果如下
4 mongod     1982      1  0 11:47 ?        00:00:16 mongod --dbpath=/application/mongodb/data --logpath=/application/mongodb/log/mongodb.log --port=27017 --logappend --fork
5 root       2056   1566  0 12:21 pts/1    00:00:00 grep --color=auto mongod

02.查看mongod进程的系列限制

1 cat /proc/1982/limits
2 
3 #结果如下
4 Limit             Soft Limit(软限制->最小值) Hard Limit(硬限制->最大值) Units
5 Max processes      1024                     64000                   processes
6 Max open files      65535                    65535                   files

化解措施:

①方法一

1 vim
/etc/security/limits.d/90-nproc.conf

2 *
soft nproc 32000
#此为修改后结果,reboot重启生效 

②方法二

1 vim /etc/security/limits.conf
2 
3 # End of file
4 mongod soft nofile 64000
5 mongod hard nofile 64000
6 mongod soft nproc 32000 
7 mongod hard nproc 32000

翻开系统限制

 1
ulimit -a 

#也可使用ulimit [-ftvnmu]一声令下在shell命令行中直接举办安装

#但若要系统启动时在所有窗口生效,需将上面的ulimit添加到/etc/profile

3.2.5 编辑脚本完毕SYS-V格局启动mongod

NoSQL 2NoSQL 3

 1 vim /etc/rc.d/init.d/mongod
 2 #!/bin/bash
 3 #
 4 #chkconfig: 2345 80 90
 5 #description:mongodb
 6 MONGODIR=/application/mongodb
 7 MONGOD=$MONGODIR/bin/mongod
 8 MONGOCONF=$MONGODIR/conf/mongod1.conf
 9 start() {
10  su - mongod -c "$MONGOD -f $MONGOCONF"
11 }
12 
13 stop() {
14 su - mongod -c "$MONGOD -f $MONGOCONF --shutdown"
15 }
16 
17 case "$1" in
18   start)
19  start
20  ;;
21   stop)
22  stop
23  ;;
24   restart)
25  stop
26 sleep 2
27  start
28  ;;
29   *)
30  echo $"Usage: $0 {start|stop|restart}"
31  exit 1
32 esac
33 
34 
35 chmod +x /etc/init.d/mongod

mongod.conf

3.3 基本操作及运用

赢得帮忙

 1 >
help 

NoSQL 4NoSQL 5

    db.help()                    help on db methods
    db.mycoll.help()             help on collection methods
    sh.help()                    sharding helpers
    rs.help()                    replica set helpers
    help admin                   administrative help
    help connect                 connecting to a db help
    help keys                    key shortcuts
    help misc                    misc things to know
    help mr                      mapreduce

    show dbs                     show database names
    show collections             show collections in current database
    show users                   show users in current database
    show profile                 show most recent system.profile entries with time >= 1ms
    show logs                    show the accessible logger names
    show log [name]              prints out the last segment of log in memory, 'global' is default
    use <db_name>                set current database
    db.foo.find()                list objects in collection foo
    db.foo.find( { a : 1 } )     list objects in foo where a == 1
    it                           result of the last line evaluated; use to further iterate
    DBQuery.shellBatchSize = x   set default number of items to display on shell
    exit                         quit the mongo shell

help辅助音信

翻开当前db版本

1
> db.version()

2 3.2.8 

查看当前使用db

1 > db

2 test

3 或

4 > db.getName()

5
test 

询问所有数据库

1
> show dbs

2 local
0.000GB 

切库

1 >
use test

2
switched to db test 

呈现当前数据库状态

 1 > db.stats()
 2 {
 3     "db" : "local",
 4     "collections" : 1,
 5     "objects" : 7,
 6     "avgObjSize" : 1466,
 7     "dataSize" : 10262,
 8     "storageSize" : 36864,
 9     "numExtents" : 0,
10     "indexes" : 1,
11     "indexSize" : 36864,
12     "ok" : 1
13 }

翻开当前数据库的连接机器地址

1 >
db.getMongo()

2
connection to 127.0.0.1 

创办数据库

当使用use命令时系统会活动成立一个数据库,假使use之后没有开创任何聚众,系统就会去除那一个数据库

 1
> use banana

2
switched to db banana 

 删除数据库

一经没有接纳其余数据库,会删除默许的test数据库

1 > db.dropDatabase()
2 { "ok" : 1 }
3 > show dbs;
4 local  0.000GB

 

创立集合

方法1:

1 > use banana;
2 switched to db banana        #相当于use banana ,不同的是(从mysql关系型数据库角度解释),在mongodb中banana允许未创建情况下use banana,在创建数据表后,即创建了banana,否则banana不会创建
3 > db.createCollection('a'); #创建集合a,a相当于mysql中的数据表
4 { "ok" : 1 }                # 提示创建成功
5 > db.createCollection('b');
6 { "ok" : 1 }
7 > show collections;
8 a
9 b

 方法2:

 1 > db.c.insert({username:"mongodb"})   #向c集合插入数据
 2 WriteResult({ "nInserted" : 1 })   ->成功写入文档
 3 
 4 > show collections
 5 a
 6 b
 7 c
 8 > db.c.find()   #显示数据集合中所有数据,当前仅一条
 9 { "_id" : ObjectId("5743c9a9bf72d9f7b524713d"), "username" : "mongodb" }
10 > db.log.find().pretty();   # 格式化打印结果
11 {
12     "_id" : ObjectId("5743c9a9bf72d9f7b524713d"),
13     "uid" : 0,
14     "name" : "mongodb",
15     "age" : 6,
16     "date" : ISODate("2018-01-03T08:37:00.214Z")
17 }
18 
19 > db.c.drop()   #删除c集合
20 true
21 > db.c.find()   #c集合置空

批量布置数据

1 > for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }   #批量插入10000个数据
2 
3 #查询集合中的记录数
4 > db.log.find()

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

 1 #设置每页显示数据的大小:每页显示50条记录
 2 > DBQuery.shellBatchSize=50; 
 3 #查看第1条记录
 4 > db.log.findOne() 
 5 #查询总的记录数
 6 > db.log.count()
 7 #删除集合中所有记录
 8 > db.log.remove({})
 9 #集合中数据的原始大小
10 > db.log.dataSize()
11 #集合中索引数据的原始大小
12 > db.log.totalIndexSize()
13 #集合中索引+数据压缩存储之后的大小
14 > db.log.totalSize()
15 #集合中数据压缩存储的大小
16 > db.log.storageSize()

 

此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不圆满之处),原创文章允许转发,转发时请务必以超链接格局申明小说原来出处,小编消息和本表明,否则将探索法律权利。

作者:banana童

出处:http://www.cnblogs.com/bananaaa/

 

1.2.2 NoSQL的优势

高可扩张性、分布式总结、没有复杂的涉嫌、低本钱、架构灵活、半结构化数据

 

第3章 MongoDB软件安装

3.1 前提条件

官方下载地址www.mongodb.com

安装文档地址
docs.mongodb.com
mongoing.com

软件所协助的平台(X86_64)

  在3.4版更改:MongoDB不再支持32位的x86平台

 NoSQL 6

小心:切记在选用mongodb版本时要肯定帮忙/包容哪些操作系统及版本音讯,如利用3.2本子需安装在CentOS6.2级以上操作系统

1.2 NoSQL简介

NoSQL=Not Only SQL,协理类似SQL的功效, 与Relational Database相辅相成

其适用于质量较高,不行使SQL意味着没有结构化的储存须要(SQL为结构化的询问语句),没有约束之后架构越发灵活

2.2 MongoDB优势

MongoDB是开源产品,On GitHub,Licensed under the AGPL,起点&赞助by
MongoDB公司,提供商业版licenses许可

01.功能

JSON文档模型、动态的数目格局、二级索引强大(特有)、查询功用、自动分片、水平扩张、自动复制、高可用、文本搜索、企业级安全、聚合框架MapReduce、大文件存储GridFS、地理地点索引

支撑二种存储引擎:

 NoSQL 7

02.囤积引擎相比较

 

MySQL

InnoDB

MongoDB

MAPI

MongoDB

WiredTiger

事务

YES

NO

NO

锁粒度

ROW-level行级锁

Collection-level

Document-level

Geospatial

YES

YES

YES

MVCC

YES

NO

NO

Replication

YES

YES

YES

外键

YES

NO

NO

数据库集群

NO

YES

YES

B-TREE索引

YES

YES

YES

全文检索

YES

YES

YES

数据压缩

YES

NO

YES

存储限制

64TB

NO

NO

表分区

YES

YES(分片)

YES(分片)

03.数据库效率和属性分布图

 NoSQL 8

2.4 MongoDB适用场景

1)网站数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性
2)缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载
3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储
4)高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对 MapReduce 引擎的内置支持
5)用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询

3.2.3 YAML形式编写配置文件

 1 systemLog:
 2    destination: file
 3    path: "/application/mongodb/log/mongod.log"
 4    logAppend: true
 5 storage:
 6    journal:
 7       enabled: true
 8    dbPath: "/application/mongodb/data"
 9 processManagement:
10    fork: true
11 net:
12    port: 27017

那儿关门mongodb重新启航即可

3.2.4 MongoDB的关门措施

1.1 前言

01.数额的概念:文字、图像、地理地方音讯(坐标、经纬度)等

02.数据库管理连串的定义:建立、存取和管制数据,保障数据安全和完整性的软件

03.周边的数据库管理种类:

关系型:MySQL、Oracle、SQL Server、Db2等
非关系型:MongoDB、Redis、HBase等

数据库管理序列利用状态排行https://db-engines.com/en/ranking

2.3.2 层次关系图

 NoSQL 9

第1章 数据库管理种类

2.3 数据逻辑结构

2.3.1 层次关系

文档(document)、集合(collection)、数据库(database)

第2章 MongoDB

3.2 安装及启动

01.创办所需用户和组

 1
groupadd -g 800 mongod 2 useradd -u 801 -g
mongod mongod 3 passwd
mongod 

02.开立mongodb所需目录结构

 1 mkdir
-p /application/mongodb/{bin,conf,log,data} 

03.上传并解压软件到指定地点

1 cd /application/
2 
3 rz#上传mongodb-linux-x86_64-3.2.8.tgz包
4 
5 tar -zxvf mongodb-linux-x86_64-3.2.8.tgz
6 cd mongodb-linux-x86_64-3.2.8/bin/
7 cp -a * /application/mongodb/bin

04.安装目录结构权限

 1 chown
-R mongod:mongod /application/mongodb 

05.装置用户环境变量

1 su

  • mongod

2

3 vim .bash_profile

4 export
PATH=/application/mongodb/bin:$PATH

5

6 source
.bash_profile 

06.起动mongodb(无需初始化)

 1 mongod
–dbpath=/application/mongodb/data
–logpath=/application/mongodb/log/mongodb.log –port=27017 –logappend
–fork 

表明:在开行mongodb要指定数量、日志路径及端口号(默许也得以)

06.1打响标识

about to fork child process, waiting until server is ready for connections.
forked process: 1294
child process started successfully, parent exiting

2.4.1 MongoDB使用境况

1 我的数据量是有亿万级或者需要不断扩容 
2 需要2000-3000以上的读写每秒
3 新应用,需求会变,数据模型无法确定
4 我需要整合多个外部数据源
5 我的系统需要99.999%高可用
6 我的系统需要大量的地理位置查询
7 我的系统需要提供最小的latency
8 我要管理的主要数据对象 <10

证实:以上原则满意一个足以考虑MongoDB,满足八个挑选MongoDB不会后悔

 

3.2.4.1  kill进程情势(不提议拔取)

1 $ kill
-2 PID #原理:-2意味向mongod进程发送SIGINT信号

2 或

3 $ kill
-4 PID
#规律:-4代表向mognod进度发送SIGTERM信号 

网站地图xml地图