1. 什么是NoSQL,什么情况下会使用
- 本质也是一种数据库的技术,相对于传统数据库技术,它不会遵循一些约束,比如:sql标准、ACID属性,表结构等。
- 使用场景
- 对数据库进行高并发读写
- 对海量数据进行高效存储和访问
- 对数据库高扩展性和高可用性
- 灵活的数据结构,满足数据结构不固定的场景
- 优点
- 应用不需要事务及复杂 join 支持
- 新应用,需求会变,数据模型无法确定,想快速迭代开发
- 应用需要2000-3000以上的读写QPS(更高也可以)
- 应用需要TB甚至 PB 级别数据存储
- 应用发展迅速,需要能快速水平扩展
- 应用要求存储的数据不丢失
- 应用需要99.999%高可用
- 应用需要大量的地理位置查询、文本查询
- 缺点
- 弱事务
- 实现复杂sql比较麻烦
- 运维人员维护成本
- 目前不是主流的数据库技术
2. 什么是MongoDB
- 特性
- 无模式、文档性,nosql,最像关系数据库的
- 面向集合文档的存储Bson(json的扩展)
- 格式自由,数据结构不固定,生产环境下修改结构不影响程序运行
- 强大的sql
- 索引支持,支持查询计划
- 复制和自动故障转移
- 支持二进制数据及文件存储
- 支持分片
- 使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作
- 组成
- 实例
- 系统上运行库的进程及节点集
- 库
- 多个集合组成的数据库,每个数据库是独立的,有自己的用户,权限,独立的存储文件集
- 集合(表)
- 一组文档
- 文档(行)
- 由多个键-值有序组成在一起的数据单元
3. 应用场景
- 游戏场景,使用 MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
- 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
- 社交场景,使用 MongoDB存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
- 物联网场景,使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
- 视频直播,使用 MongoDB 存储用户信息、礼物信息等
4. 安装
- docker安装
~ > docker pull mongo:latest
~ > docker run -itd --name mongo -p 27017:27017 -v /usr/local/mongo:/data/db mongo --auth
~ > docker exec -it mongo bash
# 默认连接本地的27017端口的MongoDB
# 指定IP与端口进行连接 mongo 127.0.0.1:27017
# 指定用户名和密码连接到指定的MongoDB数据库 mongo 127.0.0.1:27017/admin -u user -p password
root@dae834800c37:/# mongo
> db.version()
4.2.1
# mgdb.conf
# https://docs.mongodb.com/v4.0/reference/configuration-options/
# 4.0配置
storage:
dbPath: "/usr/local/mongodb/data/db" #数据文件存放目录
systemLog:
destination: file
path: "/usr/local/mongodb/log/mongodb.log"
net:
bindIp: 0.0.0.0 #本地监听 IP,0.0.0.0 表示本地所有 IP
port: 27017
processManagement:
fork: true #以守护程序的方式启用, 即在后台运行
setParameter:
enableLocalhostAuthBypass: false #是否需要验证权限登录(用户名和密码)
- mac
- 安装
~ > brew tap mongodb/brew
~ > brew install mongodb-community@4.2
Updating Homebrew...
Error: The following directories are not writable by your user:
/usr/local/share/man/man8
You should change the ownership of these directories to your user.
sudo chown -R $(whoami) /usr/local/share/man/man8
~ > sudo chown -R `whoami`:admin /usr/local/bin
~ > sudo chown -R `whoami`:admin /usr/local/share
- 目录
- 配置文件(/usr/local/etc/mongod.conf)
- 日志文件(/usr/local/var/log/mongodb/mongo.log)
- 数据目录(/usr/local/var/mongodb)
- 启动
~ > brew services list
Name Status User Plist
mongodb-community started anxin /Users/anxin/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
# 或者mongod --config /usr/local/etc/mongod.conf --fork
# 接连
~ > mongo
- linux
官网下载安装介质,选择适当的版本,这 里以 linux 版本 mongodb-linux-x86_64-4.0.4 为例;
~ > pwd
# /usr/local
~ > tar zxvf mongodb-linux-x86_64-4.0.4.tgz
~ > mv mongodb-linux-x86_64-4.0.4.tgz mongodb
~ > cd mongodb
~ > mkdir -p {data/db,log,conf}
# 见docker安装4.0配置文件
~ > vi conf/mgdb.conf
# 修改环境变量
~ > vi /etc/profile
# mac vim ~/.base_profile
export MONGODB_HOME=/soft/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
~ > source /etc/profile
# 配置开机启动
~ > vi /usr/lib/systemd/system/mongodb.service
~ > systemctl daemon-reload
~ > systemctl start mongodb
~ > systemctl enable mongodb
# 启动 mongodb
~ > service mongodb stop
~ > service mongodb start
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
RuntimeDirectory=mongodb
PIDFile=/soft/mongodb/data/db/mongod.lock
ExecStart=/soft/mongodb/bin/mongod --config /soft/mongodb/conf/mgdb.conf
ExecStop=/soft/mongodb/bin/mongod --shutdown --config /soft/mongodb/conf/mgdb.conf PrivateTmp=true
[Install]
WantedBy=multi-user.target