mongoDB(一)生产环境基础实践
时间:2022-07-25
本文章向大家介绍mongoDB(一)生产环境基础实践,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
mongoDB生产环境基础实践
环境准备
- 操作系统: centos7
- mongoDB软件版本: 4.0
单机安装
[root@centos7-node4 ~]# cd /opt/
[root@centos7-node4 opt]# https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.17.tgz
[root@centos7-node4 opt]# tar xf mongodb-linux-x86_64-4.0.17.tgz
[root@centos7-node4 opt]# mv mongodb-linux-x86_64-4.0.17 /usr/local/mongodb
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongo --version #查看版本
MongoDB shell version v4.0.17
单机单例模式配置与服务启动
- 单机模式配置
[root@centos7-node4 ~]# mkdir /data/mongodb/27017/ -p #创建数据目录
[root@centos7-node4 ~]# vim /data/mongodb/27017/mongodb.conf
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27017/mongodb.log
storage:
dbPath: /data/mongodb/27017/
journal:
enabled: true
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
- 单机模式启动
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf #直接启动
[root@centos7-node4 ~]# ls /data/mongodb/27017/ #验证数据文件是否存在
[root@centos7-node4 ~]# netstat -tanlp| grep 27017
[root@centos7-node4 ~]# ps -ef | grep mongod
- 启动参数优化
- 强烈建议使用xfs文件系统
- 访问控制配置
- 不推荐root启动
- 大页内存要禁止
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongo 127.0.0.1:27017 #客户端连接
[root@centos7-node4 ~]# vim /etc/security/limits.conf #优化参数
* - nofile 65535
* - nproc 65535
[root@centos7-node4 ~]# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
[root@centos7-node4 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled # 关闭大页内存
[root@centos7-node4 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
[root@centos7-node4 ~]# vim /etc/rc.local
echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled
echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag
[root@centos7-node4 ~]# chmod +x /etc/rc.d/rc.local
### 需要先杀掉进程,然后再执行如下操作
[root@centos7-node4 ~]# useradd mongodb -s /sbin/nologin #创建启动用户
[root@centos7-node4 ~]# chown -R mongodb:mongodb /data/mongodb /usr/local/mongodb/
[root@centos7-node4 ~]# su - mongodb -s /bin/bash #切换用户
[mongodb@centos7-node4 ~]$ /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf
mongodb客户端的基础使用
基础概念
database # 数据库 collection # 集合,类似于表 filed #字段 document #每行的记录
mongo shell客户端的使用
> show dbs; #查看数据库
### 优雅关闭数据库
> use admin
> db.shutdownServer()
基本使用
> use test #有则切换,无则创建并切换
## 数据插入
> db.mytest.insert({"name":"test","age":22}) #在myest插入数据
> db.mytest.insert({name:"zahangsan1",age:29})
> db.mytest.insert({name:"zahangsan2",age:29})
## 数据查询
> db.mytest.find({"name":"test"}) #按条件查询数据
> show collections
> db.mytest.find() #查询所有数据
### 数据删除
> db.mytest.remove({name:"zahangsan1"}) #删除指定数据
> db.mytest.remove({}) #清空数据
> db.mytest.drop() #删除collections
> db.dropDatabase() #删库跑路
### 数据更新
> use test
> db.mytest.insert({name:"test",age:11})
> db.mytest.insert({name:"test1",age:12})
> db.mytest.insert({name:"test2",age:13})
> db.mytest.update({name:"test"},{$set:{name:"demotest",age:21}}) #更新整条数据
> db.mytest.update({name:"test1"},{$set:{age: 99}}) #更新单个字段
mongoDB 集合的多种查询方式
- 数据准备
use test
db.myuser.insert({name:"zhansan1",age:20})
db.myuser.insert({name:"zhansan2",age:30})
db.myuser.insert({name:"zhansan3",age:40})
db.myuser.insert({name:"zhansan4",age:50})
db.myuser.insert({name:"lisi1",age:22})
db.myuser.insert({name:"lisi2",age:32})
db.myuser.insert({name:"lisi3",age:42})
db.myuser.insert({name:"lisi4",age:52})
> db.myuser.find() #查询数据
- 操作
> db.myuser.find().pretty() #json格式展示数据
> db.myuser.find().limit(2) #限制查询2条
> db.myuser.find().skip(2).limit(2) #跳过两条数据,然后限制查询2条【用于分页场景】
> db.myuser.find().sort({age:1}) #按年龄字段升序排列,-1是降序
> db.myuser.find({age:{$lt:30}}) # 数据条件比较
> db.myuser.find({$or:[{name:"zhansan1"},{name:"zhansan2"}]}) #多条件查询
> db.myuser.find({$and:[{name:"zhansan1"},{age:20}]}) #多条件查询,用户密码认证
> db.myuser.find({name:{$regex:"zhansan[2-4]"}}) #正则匹配
> db.myuser.find({name:{$regex:"zhansan*"}})
索引查询与建立
- 插入500000条数据 > use test > for(i=0;i<500000;i++){ db.myuser.insert({name:"mytest"+i,age:i}) } > db.myuser.count() #查看行数
- mongo有慢查询的概念,默认超过100ms会记录日志
> db.getProfilingStatus()
> db.myuser.find({age:9999}).explain(true) #查看语句性能
> db.myuser.getIndexSpecs() #查看index
> db.myuser.find({ "_id" : ObjectId("5e81bbcc42a3d24645ee2223")}).explain(true) #跟age:9999对比
> db.myuser.ensureIndex({age:1}) #为age添加升序的索引
> db.myuser.find({age:9999}).explain(true) #加快查询速度
> db.myuser.dropIndex({age:1}) #删除索引
> db.myuser.find({name:/9999/}).explain(true) #即使创建索引,但是正则匹配也会出现慢查询
- 建立唯一索引: 默认索引对应的数据不能重复
> use test
> db.dropDatabase() #删除原先的数据库
> use test
> db.myuser.insert({userid:1})
> db.myuser.insert({userid:1})
> db.myuser.find() #插入重复数据是追加的
> db.myuser.remove({}) #清空数据
> db.myuser.ensureIndex({userid:1},{unique:true}) #设置唯一索引
实时监控命令
### 插入测试数据
> use test
> for(i=1;i<300000;i++){
db.myuser.insert({name:"mytest"+i,age:i})
}
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongostat -h 127.0.0.1:27017 #显示实时状态
- 使用serverstatus获取相关数据信息
>db.serverStatus()
> db.serverStatus().network
> db.serverStatus().opcounters
> db.serverStatus().connections
- 非交互式获取监控数据(结合监控脚本获取数据)
[root@centos7-node4 ~]# echo "db.serverStatus()" | /usr/local/mongodb/bin/mongo
[root@centos7-node4 ~]# echo "db.serverStatus().network" | /usr/local/mongodb/bin/mongo
[root@centos7-node4 ~]# echo "db.serverStatus().opcounters" | /usr/local/mongodb/bin/mongo | grep insert |egrep -o "[0-9]+" #获取监控数值
800023
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 马上2021年了线性表你还不知道原理?给老王整的明明白白
- 分治-芯片测试问题
- 你说啥什么?注解你还不会?
- Mybatis系列第五讲 Mapper接口多种方式传参详解、原理、源码解析
- Mybatis系列第十讲 动态SQL,这么多种你都会?
- 3D图形学线代基础
- Splash抓取jd
- codeforces 1395C(暴力枚举)
- 不到100行代码搞定Python做OCR识别身份证,文字等各种字体
- codeforces 1389B(贪心)
- 又一个自动生成项目目录组件tree-cli,快速生成Readme项目结构
- 用Vue CLI创建uni-app,摆脱HBuilder,npm命令行运行及发布
- codeforces 1133D(map+精度控制)
- 1024程序员节 | 我在腾讯自研数据库,我为技术代言
- jasmine spyOn的单步调试