MongoDB非关系型数据库

关系型于非关系型

NoSQL(not only sql)

NoSQL,指的是 非关系型的数据库

NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

对NoSQL是普遍的解释是"非关联型的",强调 Key-Value Stores文档数据库的优点,而不是单纯的RDBMS。

NoSQL用于超大规模数据的存储。

这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

Mongo和MySQL数据对比

结构对比:

MySQL mongo
集合
字段 key:value
文档

内容对比:

## mysql数据结构:
name          age  job  
oldzhang     28   it 
xiaozhang    28     it
xiaofei        18      student  SZ

## mongo数据结构:
{name:'oldzhang',age:'28',job:'it'},
{name:'xiaozhang',age:'28',job:'it'},
{name:'xiaozhang',age:'28',job:'it',host:'SZ'}

MongoDB

高性能:

  • Mongodb提供高性能的数据库持久化

  • 尤其是支持嵌入式数据模型减少数据库系统上的I/O操作

  • 索引支持更快的查询,并且可以包括嵌入式文档和数组中的键

丰富的语言查询:

  • Mongodb支持丰富的查询语言来支持读写操作(CRUD)以及数据汇总,文本搜索和地理空间查询

高可用性:

  • Mongodb的复制工具,成为副本集,提供自动故障转移和数据冗余。

水平可扩展性:

  • Mongodb提供了可扩展性,作为其核心功能的一部分,分片是将数据分在一组计算机上。

支持多种存储引擎:

  • WiredTiger 存储引擎和 MMAPv1 存储和 InMemory 存储引擎

Mong0DB应用场景

应用场景:https://www.zhihu.com/question/32071167

  • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新

  • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来

  • 社交场景,使用 MongoDB 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能

  • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析

  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等,用户评价

  • 电商场景,使用 MongoDB 电商上衣和裤子两种商品,除了有共同属性,如产地、价格、材质、颜色等外,还有各自不同的属性集,如上衣的独有属性是肩宽、胸围、袖长等,裤子的独有属性是臀围、脚口和裤长等

MongoDB的安装与部署

官方文档:https://docs.mongodb.com/manual/?_ga=2.57024426.1834178963.1557492386-816165234.1557492386

规划目录

目录 位置
软件所在位置 /opt/mongodb
单节点目录 /opt/mongo_27017/{conf,log,pid}
数据目录 /data/mogo_27017

下载并解压

下载地址:https://www.mongodb.org/dl/linux/

yum install libcurl openssl -y
#下载软件
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz
tar zxf mongodb-linux-x86_64-3.6.13.tgz -C /opt/
cd /opt/
ln -s mongodb-linux-x86_64-3.6.13 mongodb

创建文件目录以及数据目录

mkdir -p /opt/mongo_27017/{conf,log,pid}
mv /data /data_bak
mkdir -p /data/mongo_27017 

配置启动mongo

创建配置文件

注:这里我们使用的是51主机,请注意配置文件下方

cat > /opt/mongo_27017/conf/mongodb.conf<< EOF
#与日志相关
systemLog:
  #日志以文件保存
  destination: file
  #如果重启之后,不进行切割,在原来日志追加
  logAppend: true
  #日志路径
  path: /opt/mongo_27017/log/mongodb.log
#与存储相关
storage:
  journal:
      #记录回滚日志
    enabled: true
  #数据目录  
  dbPath: /data/mongo_27017
  #一个库就是一个文件夹
  directoryPerDB: true
  #存储引擎
  wiredTiger:
     engineConfig:
         #缓存大小
        cacheSizeGB: 1
        #索引单独存放
        directoryForIndexes: true
     collectionConfig:
         #启动压缩
        blockCompressor: zlib
     indexConfig:
        prefixCompression: true

processManagement:
  #后台模式
  fork: true
  #pid日志文件
  pidFilePath: /opt/mongo_27017/pid/mongod.pid
#网络
net:
  port: 27017
  #可以使用localhost
  bindIp: 127.0.0.1,10.0.0.51
EOF

启动mongo

/opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf

#检查是否启动
netstat -lntup|grep 27017
tcp        0      0 10.0.0.51:27017         0.0.0.0:*               LISTEN      7632/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      7632/mongod    

配置登录mongo

写入环境变量

echo "export PATH=/opt/mongodb/bin:\$PATH" >> /etc/profile
source /etc/profile

登录

mongo

关闭mongo

方法一:使用localhost登录

mongo localhost:27017
use admin
db.shutdownServer()

方法二:

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

mongo优化告警

报警内容:内存不足

解决办法:

  1. 添加内存

  2. 调整配置文件里的cache大小

报警内容2:配置访问控制参数

报错信息:WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted.

报警内容3:不是以普通要不过户启动

报错信息:WARNING: You are running this process as the root user, which is not recommended.

解决方法:

mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
#创建用户并授权数据目录
useradd mongo
echo '123456'|passwd --stdin mongo
chown -R mongo:mongo /opt/
chown -R mongo:mongo /data/
su - mongo
mongod -f /opt/mongo_27017/conf/mongodb.conf 
mongo

注:这里出现问题,问题:文件没有全部授权,普通用户启动失败,请查看日志文件进行分析错误

报警内容4:修改内核

报错信息:WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. we suggest setting it to 'never'

WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'

解决方法:

#临时解决
建议将内核文件改成never
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
mongod -f /opt/mongo_27017/conf/mongodb.conf
mongo

#写入开机自启动
chmod +x /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

报警内容5:软件进程被限制

报错信息:WARNING: soft rlimits too low. rlimits set to 31771 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.

#写入配置文件:
vim /etc/profile
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000

#生效配置
source /etc/profile

猜你喜欢

转载自www.cnblogs.com/Mercury-linux/p/12697416.html