MongoDB属于非关系型数据库,增加对比


关系型数据库:

  1. 关系型数据库:
  • 使用二维表表示数据,数据联系
  • 数据库管理三个阶段:手工管理,文件管理,数据库管理
  • 存放数据,提供快速的增删改查操作
  • 备份、恢复、管理系统工具、编程语言的接口
  1. 关系型数据库概念:
  • 数据:表达信息的载体
  • 数据结构:数据组织的方式,数据之间的关系
  • 数据库:数据库科学,有效管理,有效存放,管理的仓库
  • DBMS:数据库管理系统,数据库管理软件
  • 表:由行,列组成,用来表示一定意义的数据
  • 字段:表的一列,表示实体的一个属性
  • 键:可以区分实体的属性(属性的组合)
  • 主键:从键中选择一个作为一个主键
  • 索引:提高查询效率,避免全表扫描
  1. 缺点:
  • 性 能:高并发数据量大的情况下,性能容易成为瓶颈
  • 数据一致性:写数据的时候需要加锁
  • 连表查询:容易导致性能下降
  • 扩展性:无法通过横向扩展性能和负载
  • 非结构化数据的处理:不方便

MongoDB(非关系型数据库)


非关系型数据库

  1. 优点:
  • 高并发,读写能力强
  • 易扩展
  • 弱化数据结构,降低数据一致性要求
  1. 缺点:
  • 技术成熟度不如关系型数据库
  • 通用性较差,不像SQL语言有统一标准
  • 操作冗长,容易混乱
  • 有些不支持jion、事务,一致性不如关系型数据库
  1. 使用关系型数据库的情况
  • 对数据一致性要求较低(低价值数据)
  • 数据库需要处理海量并发
  • 需要快速处理数据的情况
  • 方便构建非关系数据模型
  1. 分类:
  • 键值对:key-value 【redis
  • 文档型: 【MongoDB
  • 列存储: 【Hbase
  • 图形数据库: 【暂无
  1. MOngoDB 特点
  • 开发语言C++
  • 支持丰富的增删改查,最想像关系型数据库
  • 技术相对成熟,支持丰富的存储类型
  • 支持众多的编程语言接口
  • 使用方便,易于扩展 部署

Mongo 安装部署

  1. Ubuntu : sudo apt-get install mongodb
  • 默认安装到:/Var/lib/mongodb
  • 配置文件: /etc/mongodb.conf
  • 命令集:/usr/bin

MongoDB基本操作

  1. mogod --dbpath 目录
  • 功能:设置mongodb数据存储路径
  • e.g. mogod – dbpath /home/…
  1. mongod --port 端口号
  • 功能:修改服务监听端口 默认27017
  1. 启动mongo操作界面(mongo shell)
  • mongo(本机)
  • mongo IP:端口号 (远程)
  • mongo IP/数据库名 -u xxx -p xxx (使用指定用户名密码远程数据库)

Mongo数据库结构

  • 键值对–>文档–>集合–>数据库

关系型数据库

MongoDb数据库

数据库

数据库


集合(collection)


文档(document)


域(field)

索引

索引

主键

主键


MongoDB库操作

  1. 创建库:use databaseName
    说明: 进入某个库,当库不存在时实际写入数据时自动创建
    命名规则: 使用utf-8字符,长度不超过64,不能重名系统数据库
  2. 查看库:show dbs
    系统中有几个默认库
    admin 该库中成员拥有最高权限
    local存储跟本地数据库相关的数据,即使远程也不会复制到其他服务器
  3. 查看当前所在库: db
  4. 删除库: db.drop.Database()
    删除之前先进入该库

MongoDB数据的备份和恢复

  1. 备份:mongodump -h 主机 -d 库名 -o 目录
  2. 恢复:mongorestore -h 主机:端口 -d 库名 路径

MongoDB数据库监控

  1. mongostat
    mongotop 检测读写时长
  2. insert query update delete 每秒执行的增删改查的次数
  3. command 每秒运行的命令次数
  4. flushes 每秒清理缓存次数
  5. vsize 虚拟内存的使用量
  6. res 物理内存使用量

MongoDB集合操作

  1. 集合:相当于关系型数据库中的表,包含很多文档,没有特定的结构,有数据插入时自动创建
  2. 集合的使用:
  • 同一类数据放入一个集合
  • 尽量保持数据一致性
  1. 集合数据的操作:
    [注意事项:不能为空,不能含有\0 字符串,不能以system开头,不能含有系统保留前缀]
  • 创建集合: db.cresteCollection(‘collectionName’)
  • 插入集合:db.acct.insert({acct_nu:622345000001,acct_na:‘Jerry’,balance:5000.00})
  • 查看文档:db.acct.find().pretty()
  • 重命名集合: db.acct.renameCollection(‘newName’)

MongoDB文档操作

  1. 文档:文档时构成集合的基本单元,相当于关系型数据库的行,由一系列键值对组成
  2. 文档:键不能重复并且是有序的,区分大小写,使用UTF-8
  3. 操作:
  • 插入文档:
  • 同时插入两笔 :db.acct.insert([{acct_nu’6227000001’,acct_na:‘Rookie’,acct_type:1,balance:1882.67},{acct_nu’6227000001’,acct_na:‘Duke’,acct_type:1,balance:893445.67}])
  • save 插入(如果存在加上UUID则修改,不存在就插入): db.acct.save({"_id" : ObjectId(“5c10cf8792a9b98ba2418526”),acct_nu:‘3227000002’,acct_na:‘Ema’,acct_type:2,balance:9999.99})
  • objectID 长度:24
  • 8:文档创建时间
  • 6:机器ID
  • 4:进程ID
  • 6:流水号

MongoDB数据类型

  • Double 1 浮点型
  • String 2 字符串
  • Object 3 内嵌文档
  • Array 4 数组
  • Binarry Data 5 二进制
  • Objectid 7 系统生成object
  • Boolean 8 布尔值
  • Date 9 日期时间
  • NULL 10 空值
  • Integer 16/18 整形(32b/64b)
  • Timestamp 17 时间戳