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
~ > 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