MongoDB day01

目录

MongoDB (芒果数据库)

数据库

集合

文档


 

day01

MongoDB (芒果数据库)

数据存储阶段

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

  1. 优点:
    1. 数据可以长期保存
    2. 数据有一定格式化规范
    3. 可以大量存储
    4. 使用简单方便
  2. 缺点:
    1. 数据一致性差
    2. 用户查找修改不方便
    3. 数据冗余

数据库管理阶段:

  1. 优点:
    1. 数据组织结构化,降低了冗余
    2. 提高了增删改查的效率
    3. 便于扩展,方便程序调试做自动自动化处理
  2. 缺点:
    1. 数据库的使用专业性较强,相对比较复杂

几个概念

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

关系型数据库

  1. 采用关系模型来组织数据结构的数据库(二维表)
  2. 对应的数据库:Oracle  DB2  SQLServer  Mysql  Sqlite
  3. 优点:
    1. 容易理解,逻辑类似常见的表格
    2. 使用方便,都是用sql语句,sql语句非常成熟
    3. 数据一致性高,冗余低,完整度高,技术成熟,可以使用外部链接等复杂操作
  4. 缺点:
    • 每次操作都需要SQL语句解析,消耗较大
    • 不能很好的满足并发需求,应对海量数据爆发力不从心
    • 关系型数据库内存存在大量的加锁操作,读写能力受到限制 
    • 数据不够灵活,有时候会导致结构复杂化

非关系型数据库(Nosql --> not only sql)

  • 优点
    • 高并发
    • 扩展性强,使用灵活
    • 弱化了数据结构,降低数据一致性
  • 缺点:
    • 通用性差,没有sql那么统一的操作语句
    • 操作灵活,容易混乱
    • 没有join等复杂操作,版本更新快

Nosql的使用情况

  1. 数据的一致性要求低
  2. 处理数据的海量并发
  3. 数据库大小不容易确定,需要分布扩散
  4. 给定的数据结构建立非关系模型更加容易

Nosql分类

  • 键值数据库 Redis
  • 列存储数据库 
  • 文档数据库 MongoDb
  • 图形数据库

MongoDB(数据库非关系型数据库--> 文档型数据库)

  1. 由c++编写的数据库管理系统
  2. 支持丰富的增删改查功能
  3. 支持丰富的数据类型
  4. 支持众多的编程语言结构(python ohp c++ js c#)
  5. 在Nosql中技术相对比较成熟

MongoDB安装

  1. 自动安装
    1. 指令sudo apt-get install mongodb
    2. 默认安装路径:
      /var/lib/mongodb
    3. 配置文件位置:
      /etc/mongodb.conf
    4. 命令集:
      /usr/bin /usr/local/bin
    5. whereis 软件名:
      查看一个软件的位置
       
  2. 手动安装(ubuntu)
    1. 下载合适版本的mongodb
      www.mongodb.com--->get mongodb-->community server
    2. 选择合适的位置解压 (/usr/local  /opt)
      tar 解压后得到Mongodb文件夹
    3. 将文件夹下bin文件夹加入到环境变量
      (bin中就是命令集)

      PATH=$PATH:/opt/mongo..../bin
      export PATH
      将以上两句写入 /etc/rc.local
    4. 重启系统

Mongodb命令

  1. 设置数据库的存储位置
    mongod --dbpath  目录
    e.g.:mongod --dbpath abs
  2. 设置数据库接口
    mongod  --port   8080
    如果不设置默认 27017
  3. mongo
    1. 进入mongo shell
      mongodb的交互模式,用于操作mongodb数据库
    2. 退出mongo shell
      quit()exit,或者ctrl+c

mongodb数据库组成结构

  • 组织结构:键值对--》文档--》集合--》数据库
关系型数据库
------------------------------
ID    |     name     |  age
------------------------------
1     |     Lily     |  17
------------------------------
2     |     Lucy     |  18
------------------------------
键值对 —》 文档 —》 集合 —》数据库
{
    "_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的数据库
    1. 实际use是选择使用哪个数据库,当选择的数据库不存在时就会自动创建
    2. 只有向数据库中插入数据时数据库才会被真实创建出来,而use后不会马上创建
  2. 查看数据库:show dbs
  3. 系统数据库
    admin:存放用户和权限
    local:存放本地化数据
    config:存储分片信息
  4. 数据库的命名规则
    1. 使用utf -8字符
    2. 不能含有空格 . / \ '\0' 字符
    3. 长度不能超过64字节
    4. 不能和系统数据库重名
    5. 习惯上使用小写字母,表达数据库的含义
  5. db:mongo系统全局变量,代表当前正在使用的数据库对象
    当不使用use选择任何数据库的时候,db表示test,此时插入数据则创建test数据库
  6. 数据库的备份和恢复
    1. 备份:
      备份:mongodump -h dbhost -d    dbname   -o dbdir
                         主机       要备份数据库   目录
      

      e.g.:将127.0.0.1上的stu数据库备份到bak目录中
      mongodump -h 127.0.0.1 -d stu -o bak

    2. 恢复:

      mongorestore -h  host:port -d dbname  dbpath
                        主机               数据库 目录

      e.g.:将stu数据恢复到127.0.0.1上的student数据库中,如果student数据库不存在则自动创建
      mongorestore -h 127.0.0.1:27017 -d student bak/stu

  7. 数据库监测命令
    指令:mongostat
    insert query update delete: 每秒执行增删改查次数 
    command : 每秒运行命令次数 
    flushes : 每秒清理缓存次数 
    vsize :使用的虚拟内存 
    res:物理内存 

  8. mongotop :监测每个数据库的读写时长 
     

    nstotalreadwrite
    数据集合总时长读时长写时长
  9. 删除数据库
    db.dropDatabase()删除db代表的数据库

集合

  1. 创建集合
    格式:db.createCollection(collection_name)
    e.g. :创建一个class1的集合 
    db.createCollection(“class1”)

  2. 创建集合2
    当向一个集合中插入数据的时候,如果这个集合不存在则自动创建
    db.collecionName.insert(...)
    e.g.:如果class2不存在则自动创建
    db.class2.insert({'name':'Tom','age':17})

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

  4. 集合的命名规则

    1. 合法的utf-8字符串

    2. 不能有'\0'

    3. 不能以 system.开头,是系统保留前缀

    4. 不能和关键字重复

  5. 删除集合
    db.collection.drop()
    e.g.:#删除class2这个集合
    db.class2.drop() 

  6. 集合重命名
    db.collection.renameCollection('new_name')
    e.g.:将class 重命名为class0
    db.class.renameCollection('class0')

文档

mongodb中数据的组织形式 –》 文档 
mongodb文档 :以键值对形式组成的类似字典的数据结构结合.是对数据的一种描述
 

键: 即文档的域
命名规则:

  1. utf-8格式字串
  2. 不能有'\0'
  3. 一个文档中的键不能重复
  • 文档中键值对是有序的
  • mongodb严格区分大小写

值:即文档存储数据,也就是mongodb支持的数据类型

bson-->json-->JavaScript

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

ObjectId

  • "_id" : ObjectId("5b28a02c154710728ef6cac2") 
  • _id:如果在插入文档时没有哦指定_id域,则系统会自动添加该域作为主键,值则是一个ObjectId类型数据
  • 24位 16进制数--》保证所有的_id值的唯一性
  • 8位 文档创建时间 
    6位 机器ID 
    4位 进程ID 
    6位 计数器

集合中的文档

  1. 集合中的文档不一定域的个数相同
  2. 集合中的文档不一定有相同的域
  3. 集合中的文档,值的类型不一定相同
    (关系型数据库:表决定字段,mongodb中 文档决定域)

集合设计原则

  1. 集合的文档应该尽可能描述同一类内容。有更多相同的域
  2. 同一类数据信息,不要过多分散集合存放
  3. 集合中文档的层次不要包含太多

插入文档

db.collection.insert()

  1. 插入单个文档

    1. 格式:db.collection.insert()

    2. e.g. db.class0.insert({'name':"Lucy","age":18})
      db.class0.insert({name:"Tom",age:17,sex:'m'})

    3. 插入数据时域名可以不加引号

    4. 查看插入结果 db.class.find()

    5. _id 为系统自动添加主键,如果自己写_id则为自己设 定的值,但是仍然不可重复

    6. 一个集合中的文档是有序的

  2. 插入多个文档

    1. 格式:db.collection.insert([{},{},{}])

    2. e.g. 
      db.class1.insert([{name:'阿宝',age:33,sex:'m'},{name:'阿蓉',age:27,sex:'w'},{name:'阿哲',age:32,sex:'m'}])

sava()插入文档

  1. 格式:db.collection.sava()

  2. e.g: 
    db.class0.save({name:'Davil',age:16,sex:'m'})
    db.class1.save([{name:'小白',age:30,sex:'w'},{name:'小陈',age:34,sex:'m'}])

    1. 如果不使用_id则sava用法同insert一样

    2. 如果用_id项,此时文档已经存在时则会替换原有文档

获取集合对象

  1. 格式:db.getCollection("collection")
    ===> db.collection
  2. e.g.:
    db.getCollection("class1").insert({name:'老王',age:'36'})

作业:

  1. 关系型数据库和非关系型数据库有什么区别
  2. 介绍一下mongodb数据库
  3. 复习一下mysql
  4. 练习mongodb数据的创建,集合的创建删除,文档的插入

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值