mongo(一)

2019-12-23  本文已影响0人  Freestyle_0f85

第一章 关系型与非关系型

NoSQL not only sql
NoSQL,指的是非关系型的数据库。
NoSQL有时也称作Not Only SQL的缩写
是对不同于传统的关系型数据库的数据库管理系统的统称。
对NoSQL最普遍的解释是”非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的RDBMS。
NoSQL用于超大规模数据的存储。
这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

今天我们可以通过第三方平台可以很容易的访问和抓取数据。
用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。
我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了
NoSQL数据库的发展也却能很好的处理这些大的数据。

第二章 mongo和mysql数据对比
mysql mongo
库 库
表 集合
字段 key:value
行 文档

name age job
oldzhang 28 it
xiaozhang 28 it
xiaofei 18 student SZ

{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存储引擎

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

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

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

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

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

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

第一章 安装mongodb
1.规划目录

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

2.下载并解压

yum install libcurl openssl -y
上传软件
tar xf mongodb-linux-x86_64-rhel70-4.0.14.tgz -C /opt/
cd /opt/
ln -s mongodb-linux-x86_64-rhel70-4.0.14 mongodb

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

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

第二章 配置启动mongo
1.创建配置文件

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
  pidFilePath: /opt/mongo_27017/pid/mongod.pid

net:
  port: 27017
  bindIp: 127.0.0.1,10.0.0.51
EOF

2.启动mongo

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

3.检查是否启动

netstat -lntup|grep 27017

第三章 配置登录mongo
1.写入环境变量

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

2.登录
mongo

3.关闭

方法1:
使用localhost登录
mongo localhost:27017
use admin
db.shutdownServer()

方法2:
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown

第三章 优化告警
1.访问控制

WARNING: Access control is not enabled for the database.
Read and write access to data and configuration is unrestricted.
解决方法:
开启安全认证功能

2.以root用户运行

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

解决方法1:创建普通用并切换启动
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


解决方法2:创建systemcd启动文件
cat >/lib/systemd/system/mongod.service<<EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /opt/mongo_27017/conf/mongodb.conf"
ExecStart=/opt/mongodb/bin/mongod \$OPTIONS
ExecStartPre=/usr/bin/chown -R mongod:mongod /opt/mongo_27017
ExecStartPre=/usr/bin/chown -R mongod:mongod /data/mongo_27017
PermissionsStartOnly=true
PIDFile=/opt/mongo_27017/pid/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target
EOF

useradd mongod -M -s /sbin/nologin
systemctl daemon-reload
systemctl start mongod

3.关闭大内存页技术

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'

解决方法:
临时解决:
echo "never" >/sys/kernel/mm/transparent_hugepage/enabled
echo "never" >/sys/kernel/mm/transparent_hugepage/defrag
1.写入开机自启动:
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
验证:
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
mongod -f /opt/mongo_27017/conf/mongodb.conf 
mongo 

4.解决rlimits太低

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.
解决方法1:
vim /etc/profile
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
ulimit -u 64000

生效配置:
source /etc/profile
验证:
mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
mongod -f /opt/mongo_27017/conf/mongodb.conf 
mongo 

解决方法2:创建systemcd启动文件启动
上一篇下一篇

猜你喜欢

热点阅读