MongoDB day01

MongoDB (芒果数据库)

数据存储阶段

文件管理阶段(.txt .doc .xls)

  1. 优点:
    1. 使用简单方便
    2. 数据能够长期保存
    3. 可以储存大量的数据
  2. 缺点:
    1. 数据一致性差
    2. 数据的查找修改不方便
    3. 数据冗余

数据库管理阶段

  1. 优点:
    1. 数据组织结构化,降低冗余
    2. 提高增删改查效率
    3. 方便拓展
    4. 方便程序调用,做自动化的处理
  2. 缺点:
    1. 数据库使用特定的语句操作,相对复杂

几个概念

  1. 数据: 能够输入到计算机中并被识别处理的信息的集合
  2. 数据结构: 研究一个数据集合中,数据之间关系的学科
  3. 数据库: 按照数据结构,存储数据的仓库。在数据库管理系统管理下在一定介质上的数据集合
  4. 数据库管理系统: 管理数据库的软件,用于建立维护数据库
  5. 数据库系统: 由数据库和数据库管理系统等开发工具组成的集合

关系型数据库

  1. 采用关系模型来组织数据结构的数据库(二维表)
  2. 对应的数据库:Oracle DB2 SQLServer MySql Sqlite
  3. 优点:
    1. 容易理解,逻辑类似常见的表格
    2. 使用方便,都使用sql语句,sql语句很成熟
    3. 数据一致性高,冗余低,完整性好
    4. 技术成熟,可以使用外部关联等复杂操作
  4. 缺点:
    1. 每次都需要sql语句的解析,消耗大
    2. 不能很好的满足并发需求,特别是海量数据爆发,读写能力不足
    3. 关系型数据库每一步操作都要加锁,以保证操作的原子性,增加了数据库负担数据的一致性有时导致空间浪费

非关系型数据(NoSql –>not only sql)

  • 优点:
    • 高并发,读写能力强
    • 普遍比关系型数据库容易拓展
    • 弱化了数据结果,降低数据一致性
  • 缺点
    • 通用性差,没有sql语句一样的一致化操作
    • 操作过于冗长,容易混乱
    • 没有join等复杂操作,很多也不支持事务等操作

NoSql使用情况

  1. 对数据一致性要求低
  2. 数据库需要处理海量并发
  3. 需要处理速度快,比如做一个临时的中间过度存储器
  4. 数据库构建比较方便的构建非关系模型

NoSql分类:

键值型数据库:Redis
列存储数据库:
文档型数据库:MongoDB
图形数据库

MongoDB数据库

优点

  1. 由c++编写的数据库管理系统
  2. 支持丰富的增删改查操作
  3. 支持丰富的数据类型
  4. 支持众多的编程语言接口(Python PHP C++ C#)
  5. 使用方便,便于部署。相对成熟

MongoDB安装

  1. 自动安装
    1. 指令
      sudo yum install mongodb->centos
      sudo apt-get install mongodb->ubuntu
    2. 默认目录
      默认安装位置:/var/lib/mongodb
      配置文件: /etc/mongodb.conf
      命令集 /usr/bin /usr/local/bin
  2. 手动安装(ubuntu)

    1. 下载Mongodb(开源)
      www.mongodb.com-->get mongodb --> community server

    选择想要下载的版本

    1. 选择合适的位置解压(/usr/local /opt)
      tar 解压后得到 MongoDB文件夹

    2. 将命令集 (解压后文件夹中bin目录)添加到环境变 量
      PATH=$PATH:/opt/mongo/bin
      export PATH
      将以上两句添加如 /etc/rc.local

    3. 重启系统

MongoDB 命令

  1. 设置数据库存储位置
    mongod --dbpaht 目录
  2. 设置数据库端口
    mongd --port 8080
    默认端口: 27017
  3. 进入mongo shell 界面
    mongo
    退出界面: quit() 或 ctrl +c

mongodb数据库组织形式

  1. 关系型数据库:
IDNAMEAGE
1Lily17
2Lucy18

1. 键值对 —》 文档 —》 集合 —》数据库

{
  "_id":1,
  "NAME":"Lily",
  "AGE":17
},
{
  "_id":2,
  "NAME":"Lucy",
  "AGE":18
}

mysql 和 mongodb 概念比价

mysqlmongodb含义
databasedatabase数据库
tablecollection表/集合
columnfield字段/域
rowdocument记录/文档
indexindex索引
  1. 创建数据库:use databaseName e.g. use stu #创建一个stu数据库

    • use 实际上是表示选择某个数据库使用。当这个数据库不存在时会自动创建。
    • 使用use后数据不会马上被创建,而是在实际写入数据时才会创建
  2. 查看当前系统中数据库:show dbs

  3. 系统数据库:
    admin:存放用户及其权限
    local: 存储本地数据
    config:存储分片信息

  4. 数据库的命名规则

    1. 使用utf-8字符
    2. 不能有空格,点,/ \ ‘\0’字符
    3. 长度不超过64字节
    4. 不和系统数据库重名
  5. db:mongodb系统全局变量,代表当前正在使用的数据库

    • 如果没有use任何数据库情况下 db表示test。此时插入数据则创建test数据库
  6. 数据库备份和恢复

    1. 格式:

          备份:mongodump -h dbhost -d    dbname   -o dbdir
                         主机       要备份数据库      目录
    2. e.g.
      将stu数据库备份到student目录中
      mongodump -h 127.0.0.1 -d stu -o student

  7. 恢复:

    1. 格式:

      mongorestore -h  dbhost:port -d dbname  path
                              主机           数据库  目录
    2. e.g.
      将stu数据库恢复到student数据库中
      mongorestore -h 127.0.0.1:27017 -d student student/stu

  8. 数据库的监测

    1. 指令:mongostat
      insert query update delete: 每秒执行增删改查次数
      command : 每秒运行命令次数
      flushes : 每秒清理缓存次数
      vsize :使用的虚拟内存
      res:物理内存
      这里写图片描述
  9. mongotop :监测每个数据库的读写时长
    ns total read write
    数据集合 总时长 读时长 写时长

  10. 删除数据库
    db.dropDatabase()

    1. 删除db代表的数据库
  11. 创建集合

    1. 格式:db.createCollection(collection_name)
    2. e.g.
      创建一个class1的集合
      db.createCollection(“class1”)
  12. 创建集合2
    当向一个集合中插入数据的时候,如果这个集合不存在则会自动创建
    db.collecionName.insert(...)
    e.g. 如果class2不存在则自动创建 db.class2.insert({"name":'Tom','age':17,'sex':'m'})

  13. 查看数据库中集合
    show collections
    show tables

  14. 集合命名规则

    1. utf-8 字符
    2. 不能有’\0’
    3. 不要以system.开头,因为这是系统保留集合前缀
    4. 不要和关键字重复
  15. 删除集合

    1. 格式:db.collectionName.drop()
    2. e.g. db.class.drop() #删除class这个集合
  16. 集合的重命名

    1. 格式:db.collectionName.renameCollection(“new_name”)
    2. e.g. 将class2重命名为class0
      db.class2.renameCollection("class0")

文档

mongodb中数据的组织形式 –》 文档
mongodb文档 :以键值对形式组成的类似字典的数据描述形式
键: 即文档的域
1. 键的命名规则:

1. utf-8字符串
2. 不含有'\0' 通常不用 .  $
3. 一个文档中的键不能重复
4. 文档中的键值对是有序的
5. mongodb中数据严格区分大小写

值: 即文档存储的数据 支持bson数据
JavaScript —》 json —》bson

类型
整型整数
布尔类型true false
浮点型小数
Array数组
Timestamp时间戳
Date时间日期
Object内部文档
Null空值 null
String字符串
Symbol特殊字符串
Binary data二进制字串
code代码
regex正则表达式
ObjectIdObjectId字串

ObjectId

“_id” : ObjectId(“5b503b7f38d0e992e1270560”)
_id : 当在mongo代表中插入文档时,如果不指定_id则会自动添加这个域,作为主键。
ObjectId() 值是系统自动生成的不重复字串标识
24位 8位 文档创建时间
6位 机器ID
4位 进程ID
6位 计数器

集合中的文档:

  1. 集合中的文档不一定有相同的域
  2. 集合中的文档多少不一定相同
  3. 集合中的文档,值的类型不一定相同

集合设计

  1. 集合中的文档尽可能描述同一类数据
  2. 同一类数据不要过多分散在多个集合中存放
  3. 集合中文档的结构层次不宜过多

插入文档

  1. 插入单个文档

    1. 格式:db.collectionName.insert()
    2. e.g.
      db.class0.insert({name:"HanMei",age:17,sex:'w'})
    3. 插入数据时域名可以不加引号
    4. 查看插入结果 db.class.find()
    5. _id 为系统自动添加主键,如果自己写_id则为自己设 定的值,但是仍然不可重复
    6. 一个集合中的文档是有序的
  2. 插入多个文档

    1. 格式:db.collectionName.insert([{},{},{}])
    2. e.g.
      db.class2.insert([{name:'阿宝',age:32},{name:'阿哲',age:31},{name:'阿蓉',age:26}])

save() 插入文档

  1. 格式:db.collectionName.save()
  2. e.g: db.class1.save({name:'Lily',age:13,sex:'w'})
    • 如果不加_id域时用法同insert()
    • 如果加_id,此_id值存在则save表示修改该文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值