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. 关系型数据库:
ID NAME AGE
1 Lily 17
2 Lucy 18

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

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

mysql 和 mongodb 概念比价

mysql mongodb 含义
database database 数据库
table collection 表/集合
column field 字段/域
row document 记录/文档
index index 索引
  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 正则表达式
ObjectId ObjectId字串

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表示修改该文档。

猜你喜欢

转载自blog.csdn.net/luohongtucsdn/article/details/81183765