MONGODB

一,MONGODB

1.1,简介

MongoDB 是由 C++语言编写一个基于分布式文件存储的开源 NoSQL 数据库系统。在高负 载的情况下,可添加更多的节点,以保证服务性能。在许多场景下用于代替传统的关系型 数据库或键/值存储方式。旨在为 Web 应用提供可扩展的高性能数据存储解决方案。

MongoDB 提供了一个面向文档存储,操作起来比较简单和容易,可以存储比较复杂的 数据类型。最大的特点是支持的查询语言非常强大,语法优点类似于面向对象的查询语 言。几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索 引。是一个面向集合的,模式自由的文档型数据库。

1.2,MongoDB 适用领域:

l 网站数据

l 分布式场景

l 缓存层

l 文档格式存储

1.3,逻辑结构

(1)文档(document):是 mongodb 的核心概念,是 mongodb 逻辑存储的最小单元

(2)集合(collection):多个文档组成集合

(3)数据库(database):多个集合组成数据库

1.4,物理存储结构

1.4.1,数据存储结构

l 命名空间文件(ns)

l 数据文件(0,1,2)

1.4.2,日志存储结构

l 系统日志文件 logpath

l journal 日志文件

l oplog 复制操作日志文件

l 慢查询日志

1.5,数据类型

BSON 是 Binary JSON,是二进制的格式,能将 mongdb 的所有文档表示为字节字符串。

JSON 是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集

1.5.1,BSON 的数据类型

l null,代表空或者不存在

l布尔,只有 true 和 false

l 数字,64 位浮点数

l 字符串,utf8 字符串

l 数组,值或者列表可表示为数组

l 对象,对象的数据

1.5.2,BSON 的特点

简单,简洁,容易理解、解析、记忆

1.5.3,命名规则

l 文档的键命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);_下划线开头。

l 集合的命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);system.开头;”” 空字符串。

l 数据库的命名几乎所有 utf8 字符,只有少数例外:””空字符串;\0;空格;. 点;\ ;

/。

二,安装搭建mongodb

1.安装mongodb

1.1,环境:

CentOS-6.8 192.168.25.32/24 MongoDB

1.2下载此次安装版本

 [root@MongodDB tmp]# wget   https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-        3.2.7.tgz/download

1.3,解压安装包,并移动到/usr/local/下

 [root@MongodDB tmp]# tar zxvf mongodb-linux-x86_64-rhel62-3.2.7.tgz
 ​
 [root@MongodDB tmp]# mv mongodb-linux-x86_64-rhel62-3.2.7/ /usr/local/mongodb

1.4指定同一时间最多可开启的文件数

 [root@MongodDB ~]# ulimit -n
 ​
 1024
 ​
 [root@MongodDB ~]# ulimit -n 65535
 ​
 [root@MongodDB ~]# ulimit -n
 ​
 65535

1.5,用户最多可开启的程序数目

 [root@MongodDB ~]# ulimit -u
 ​
 31994
 ​
 [root@MongodDB ~]# ulimit -u 65535
 ​
 [root@MongodDB ~]# ulimit -u
 ​
 65535

1.6,创建数据目录和日志文件及目录,并创建相应配置文件

 [root@MongodDB ~]# mkdir -p /data/mongodb1
 ​
 [root@MongodDB ~]# mkdir -p /data/logs/mongodb
 ​
 [root@MongodDB ~]# touch /data/logs/mongodb/mongodb1.log
 ​
 [root@MongodDB ~]# cd /usr/local/mongodb/
 ​
 [root@MongodDB mongodb]# ls
 ​
 bin GNU-AGPL-3.0 MPL-2 README THIRD-PARTY-NOTICES
 ​
 [root@MongodDB mongodb]# mkdir conf
 ​
 [root@MongodDB mongodb]# cat conf/mongodb1.conf
 ​
 port=27017
 ​
 dbpath=/data/mongodb1
 ​
 logpath=/data/logs/mongodb/mongodb1.log
 ​
 logappend=true
 ​
 fork=true
 ​
 maxConns=5000
 ​
 storageEngine=mmapv1

1.7,启动MongoDB数据库,-f 指定配置文件

 [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongod -f   /usr/local/mongodb/conf/mongodb1.conf 
 ​
 [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf
 ​
 about to fork child process, waiting until server is ready for connections.
 ​
 forked process: 2016
 ​
 child process started successfully, parent exiting
 ​
 [root@MongodDB mongodb]# netstat -anpt | grep mongod
 ​
 tcp       0     0 0.0.0.0:27017               0.0.0.0:*                   LISTEN     2016/mongod        
 ​
 [root@MongodDB mongodb]# ps aux | grep mongdb
 ​
 root     2044 0.0 0.0 103324   892 pts/0   S+   20:04   0:00 grep mongdb

1.8,设置开机自动启动

 [root@MongodDB mongodb]# cat /etc/rc.local 
 ​
 #!/bin/sh
 ​
 #
 ​
 # This script will be executed *after* all the other init scripts.
 ​
 # You can put your own initialization stuff in here if you don't
 ​
 # want to do the full Sys V style init stuff.
 ​
 
 ​
 touch /var/lock/subsys/local
 ​
 rm -f /data/mongodb1/mongod.lock
 ​
 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf

1.9,连接数据库

 [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongo
 ​
 MongoDB shell version: 3.2.7
 ​
 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
 ​
 Server has startup warnings:
 ​
 2019-09-02T19:50:12.394+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
 ​
 2019-09-02T19:50:12.394+0800 I CONTROL [initandlisten]
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten]
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten] **       We suggest setting it to 'never'
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten]
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten] **       We suggest setting it to 'never'
 ​
 2019-09-02T19:50:12.395+0800 I CONTROL [initandlisten]
 ​
 \> show dbs
 ​
 local 0.078GB
 ​
 \> exit
 ​
 Bye

1.10,去除启动时的报错

 [root@MongodDB mongodb]# echo never >   /sys/kernel/mm/transparent_hugepage/enabled
 ​
 [root@MongodDB mongodb]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
 ​
 [root@MongodDB mongodb]# vim .bash_profile
 ​
 [root@MongodDB mongodb]# cat .bash_profile
 ​
 alias mongo=/usr/local/mongodb/bin/mongo
 ​
 [root@MongodDB mongodb]# source .bash_profile

1.11,关闭服务的三种方法

方法一:

 [root@MongodDB ~]# mongo 
 ​
 > use admin
 ​
 switched to db admin
 ​
 > db.shutdownServer();
 ​
 server should be down...
 ​
 2019-09-02T20:19:49.361+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
 ​
 2019-09-02T20:19:49.361+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
 ​
 2019-09-02T20:19:49.361+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
 ​
 > exit
 ​
 bye
 ​
 [root@MongodDB ~]# netstat -anpt |grep mongod

方法二:

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f     /usr/local/mongodb/conf/mongodb1.conf 
 ​
 about to fork child process, waiting until server is ready for connections.
 ​
 forked process: 2081
 ​
 child process started successfully, parent exiting
 ​
 [root@MongodDB ~]# netstat -anpt | grep mongod
 ​
 tcp       0     0 0.0.0.0:27017               0.0.0.0:*                   LISTEN     2081/mongod        
 ​
 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf --shutdown
 ​
 killing process with pid: 2081
 ​
 [root@MongodDB ~]# netstat -anpt | grep mongod

方法三:

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f     /usr/local/mongodb/conf/mongodb1.conf 
 ​
 about to fork child process, waiting until server is ready for connections.
 ​
 forked process: 2102
 ​
 child process started successfully, parent exiting
 ​
 [root@MongodDB ~]# ps -ef |grep mongod
 ​
 root     2102     1 0 20:22 ?       00:00:00 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf
 ​
 root     2118 1857 0 20:22 pts/0   00:00:00 grep mongod
 ​
 [root@MongodDB ~]# kill 2102
 ​
 [root@MongodDB ~]# netstat -anpt | grep mongod
 ​
 [root@MongodDB ~]#

1.12,开启两个实例:

 [root@MongodDB ~]# cd /usr/local/mongodb/conf/
 ​
 [root@MongodDB conf]# ls
 ​
 mongodb1.conf
 ​
 [root@MongodDB conf]# cp mongodb{1,2}.conf
 ​
 [root@MongodDB conf]# ls
 ​
 mongodb1.conf mongodb2.conf
 ​
 [root@MongodDB conf]# cat mongodb2.conf
 ​
 port=27018
 ​
 dbpath=/data/mongodb2
 ​
 logpath=/data/logs/mongodb/mongodb2.log
 ​
 logappend=true
 ​
 fork=true
 ​
 maxConns=5000
 ​
 storageEngine=mmapv1
 ​
 [root@MongodDB conf]# mkdir /data/mongodb2
 ​
 [root@MongodDB conf]# touch /data/logs/mongodb/mongodb2.log
 ​
 [root@MongodDB conf]# chmod 777 /data/logs/mongodb/mongodb2.log

1.13,编写启停脚本

 [root@MongodDB conf]# cd /etc/init.d/
 ​
 [root@MongodDB init.d]# cat mongodb
 ​
 #!/bin/bash
 ​
 INSTANCE=$1
 ​
 ACTION=$2
 ​
 case "$ACTION" in
 ​
 'start')
 ​
 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
 ​
 'stop')
 ​
 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown;;
 ​
 'restart')
 ​
 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown
 ​
 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
 ​
 esac
 ​
 [root@MongodDB init.d]# chmod +x mongodb
 ​
 [root@MongodDB init.d]# /etc/init.d/mongodb mongodb1 start
 ​
 about to fork child process, waiting until server is ready for connections.
 ​
 forked process: 2139
 ​
 child process started successfully, parent exiting
 ​
 [root@MongodDB init.d]# /etc/init.d/mongodb mongodb2 start
 ​
 about to fork child process, waiting until server is ready for connections.
 ​
 forked process: 2155
 ​
 child process started successfully, parent exiting
 ​
 [root@MongodDB init.d]# netstat -anpt |grep mongod
 ​
 tcp       0     0 0.0.0.0:27017               0.0.0.0:*                   LISTEN     2139/mongod        
 ​
 tcp       0     0 0.0.0.0:27018               0.0.0.0:*                   LISTEN     2155/mongod  

到此mongodb已经搭建完毕了

2,基本操作

操作作用
show dbs查看当前示例下的数据库列表,等同于 show database
show users显示用户
use <db_name>切换当前数据库
db.help()显示数据库操作命令
show collections显示当前数据库中的集合,等同于 show tables
db.mycoll.help()显示集合操作命令,mycoll 是当前下叫做 mycoll 的集合
db.foo.find()对当前数据库中 foo 集合进行数据查找
 [root@MongodDB ~]# mongo 
 ​
 > show dbs
 ​
 local 0.078GB
 > show databases
 ​
 local 0.078GB
 ​
 > use benet
 ​
 switched to db benet
 ​
 > show dbs
 ​
 local 0.078GB
 ​
 > show tables
 ​
 > use local
 ​
 switched to db local
 ​
 > show tables
 ​
 startup_log
 ​
 system.indexes
 ​
 > use benet
 ​
 switched to db benet
 ​
 > db.user.insert({"id":1,"name":"Tom"});
 ​
 WriteResult({ "nInserted" : 1 })
 ​
 > show dbs
 ​
 benet 0.078GB
 ​
 local 0.078GB
 ​
 > show collections
 ​
 system.indexes
 ​
 user
 ​
 > db.user.find()
 ​
 { "_id" : ObjectId("5d6d0d5bea5345188da4699e"), "id" : 1, "name" : "Tom" }
 ​
 >
 ​
 bye

查看帮助

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod --help
 ​
 [root@MongodDB ~]# mongo
 ​
 MongoDB shell version: 3.2.7
 ​
 connecting to: test
 ​
 Server has startup warnings:
 ​
 2019-09-02T20:31:36.534+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
 ​
 2019-09-02T20:31:36.534+0800 I CONTROL [initandlisten]
 ​
 > help
 ​
  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
 ​
 >
 ​
 
 ​
 > db.help()
 ​
 DB methods:
 ​
  db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
 ​
  db.auth(username, password)
 ​
  db.cloneDatabase(fromhost)
 ​
  db.commandHelp(name) returns the help for the command
 ​
  db.copyDatabase(fromdb, todb, fromhost)
 ​
  db.createCollection(name, { size : ..., capped : ..., max : ... } )
 ​
  db.createUser(userDocument)
 ​
  db.currentOp() displays currently executing operations in the db
 ​
  db.dropDatabase()
 ​
  db.eval() - deprecated
 ​
  db.fsyncLock() flush data to disk and lock server for backups
 ​
  db.fsyncUnlock() unlocks server following a db.fsyncLock()
 ​
  db.getCollection(cname) same as db['cname'] or db.cname
 ​
  db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections
 ​
  db.getCollectionNames()
 ​
  db.getLastError() - just returns the err msg string
 ​
  db.getLastErrorObj() - return full status object
 ​
  db.getLogComponents()
 ​
  db.getMongo() get the server connection object
 ​
  db.getMongo().setSlaveOk() allow queries on a replication slave server
 
<think>好的,我现在需要回答用户关于Linux shell中重定向符号`>/dev/null 2>&1`的问题。首先,我要确认自己对这个符号的理解是否正确。 用户的问题是想了解这个命令的含义,特别是将输出重定向到/dev/null并合并错误流。我记得在Linux中,文件描述符1是标准输出(stdout),2是标准错误(stderr)。而`>/dev/null`是将标准输出重定向到空设备,也就是丢弃输出。然后`2>&1`的意思是将标准错误重定向到标准输出的位置,也就是同样丢弃错误信息。所以整个命令的作用是让命令的执行既不显示输出也不显示错误信息。 不过我需要确认一下顺序是否正确,因为有时候顺序会影响结果。比如,如果写成`2>&1 >/dev/null`,这样可能错误输出还是会被显示,因为先重定向了stderr到stdout的当前位置(即终端),然后再把stdout重定向到/dev/null。而正确的写法应该是先改变stdout的位置,再将stderr指向stdout的新位置,也就是`>/dev/null 2>&1`。这一点需要注意,用户可能会混淆顺序带来的不同效果。 另外,用户提到“merge error stream”,也就是合并错误流到输出流中。这时候如果使用`&>`或者`>&`这样的符号,例如`command &>/dev/null`,也可以达到同样的效果,可能更简洁。不过用户的具体例子是分开写的,可能需要解释这两种方式的异同。 还要考虑是否有其他相关知识点需要提及,例如不同的shell(如bash、zsh)在处理这些重定向时是否有差异,或者是否有类似的问题需要注意,比如子进程是否会影响重定向的结果。比如引用[1]中提到,在bash中某些情况下父进程可能不会等待所有子进程完成,这可能会影响重定向的日志处理。不过用户的问题可能不涉及这些复杂情况,但可能需要简要提及不同shell的差异。 接下来,我需要组织回答结构,首先解释每个部分的含义,然后整体作用,再举例说明,最后可能给出常见使用场景。同时,按照用户的要求,生成相关问题,可能需要包括重定向的其他用法、不同shell的区别、/dev/null的作用等。 在检查LaTeX格式时,用户提到数学表达式要用$...$,但这个问题可能不涉及数学公式,所以可能不需要使用。不过如果有涉及到变量或代码中的符号,可能需要确保格式正确。例如,在解释文件描述符时,可以用$1$和$2$表示,如文件描述符$1$代表标准输出,文件描述符$2$代表标准错误。 另外,用户要求用中文回答,所以要注意用词准确,避免术语错误。例如,“重定向”是正确的术语,而“合并错误流”可能需要更准确的表达,比如“将标准错误重定向到标准输出的位置”。 最后,生成相关问题的时候,要确保问题相关且有价值,比如询问其他重定向符号、错误处理的方法、不同shell的差异等。 总结一下,回答的结构大致如下: 1. 解释>/dev/null的作用 2. 解释2>&1的作用 3. 整体命令的作用 4. 顺序的重要性 5. 其他等效写法 6. 使用示例 7. 应用场景 8. 相关问题 需要确保每个部分都准确无误,并且引用相关的引用内容,如果有必要的话。但在这个问题中,用户的引用似乎更多是关于其他例子,比如tee命令和QEMU,可能和当前问题无关,所以可能不需要引用。但根据用户的系统指令,回答中引用的段落末尾需要添加引用标识,所以需要检查是否有需要引用的地方。例如,在提到不同shell的行为差异时,可以引用用户提供的引用[1]中的内容,说明bash和其他shell在处理子进程时的不同,但可能这更多是关于后台进程和重定向的完成时机,而不是当前问题的核心。如果和当前问题相关,可以提及,否则可能不需要。 因此,最终的思考是,用户的问题核心在于重定向的语法和含义,所以重点放在解释各个部分,顺序的重要性,以及常见用法。可能不需要涉及引用中的内容,除非在讨论相关问题时有涉及。</think>在Linux shell中,`>/dev/null 2>&1` 是**同时丢弃标准输出和标准错误**的重定向操作,具体含义如下: --- ### 分步解释 1. **`>/dev/null`** 将**标准输出(文件描述符$1$)**重定向到空设备`/dev/null`,即丢弃所有正常输出。 - 例如:`ls >/dev/null` 执行后屏幕不显示任何结果。 2. **`2>&1`** 将**标准错误(文件描述符$2$)**重定向到**标准输出的当前目标**(即`/dev/null`)。 - 注意顺序:需先指定标准输出的目标,再重定向标准错误。若写反(如`2>&1 >/dev/null`),错误仍会输出到终端[^1]。 --- ### 整体作用 - 命令的**正常输出和错误信息均被丢弃**,适用于只关注命令执行结果(通过`$?`获取返回值)、不关心输出的场景。 - 等效写法:`&>/dev/null`(更简洁,但某些旧版本shell不支持)。 --- ### 示例 ```bash # 执行命令并静默所有输出 grep "keyword" large_file.txt >/dev/null 2>&1 ``` - 若`grep`找到匹配内容,结果不显示;若文件不存在,错误信息也不显示。 --- ### 应用场景 1. **后台任务**:避免日志污染终端。 2. **脚本中非关键操作**:如临时文件清理。 3. **性能测试**:减少I/O开销对计时的影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值