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