MongoDB 01

MongoDB (芒果数据库)


数据存储阶段

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

优点 : 使用简单方便
        数据能够长期保存
    可以存储大量数据

缺点 : 数据一致性差
        数据的查找修改不方便
    数据冗余

数据库管理阶段

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


几个概念

数据 :能够输入到计算机中并被识别处理的信息的集合

数据结构:研究一个数据集合中,数据之间关系的学科

数据库: 按照数据结构,存储数据的仓库。在数据库管          理系统管理下在一定介质上的数据集合。

数据库管理系统 :管理数据库的软件,用于建立维护数                   据库

数据库系统 :由数据库和数据库管理系统等开发工具组              成的集合


关系型数据库

采用关系模型来组织数据结构的数据库 (二维表)

Oracle  DB2   SQLServer  MySql   Sqlite

优点:容易理解,逻辑类似常见的表格
      使用方便,都使用sql语句,sql语句很成熟
      数据一致性高,冗余低,完整性好
      技术成熟,可以使用外部关联等复杂操作

缺点:每次都需要sql语句的解析,消耗大
      不能很好的满足并发需求,特别是海量数据爆发,读写能力不足
      关系型数据库每一步操作都要加锁,以保证操作的原子性,增加了数据库负担
      数据的一致性有时会导致空间浪费


非关系型数据库 (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安装

自动安装
sudo apt-get install mongodb

默认安装位置 :  /var/lib/mongodb 
配置文件:/etc/mongodb.conf
命令集: /usr/bin   /usr/local/bin
(软件安装后提供功能性的命令)

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

选择想要下载的版本

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

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

4. 重启系统

Mongodb 命令

设置数据库存储位置
mongod  --dbpath   目录

e.g.    mongod  --dbpath  dbs

设置数据库端口
mongod  --port  8080 
*默认端口  27017


mongo 
进入mongo shell界面:mongodb的交互界面,操作数据库

退出界面 : quit() 或  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 概念比价

mysql        mongodb        含义

database     database       数据库

table        collection     表/集合

column       field          字段/域

row          document       记录/文档

index        index          索引


创建数据库

use databaseName 

e.g.  use stu  #创建一个stu数据库

* use 实际上是表示选择某个数据库使用。当这个数据库不存在时会自动创建。
* 使用use后数据不会马上被创建,而是在实际写入数据时才会创建


查看当前系统中数据库
show  dbs

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

数据库的命名规则
1. 使用utf-8字符
2. 不能有空格,点,/ \  '\0'字符
3. 长度不超过64字节
4. 不和系统数据库重名

db:mongodb系统全局变量,代表当前正在使用的数据库

* 如果没有use任何数据库情况下 db表示test。此时插入数据则创建test数据库


数据库备份和恢复

备份:mongodump -h dbhost -d    dbname   -o dbdir
                   主机      要备份数据库   目录

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

恢复:mongorestore -h  dbhost:port -d dbname  path
                       主机           数据库  目录

e.g.
将stu数据库恢复到student数据库中
mongorestore -h 127.0.0.1:27017 -d student  student/stu

数据库的监测
mongostat

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

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

 ns         total     read       write
数据集合    总时长    读时长    写时长


删除数据库
db.dropDatabase()

删除db代表的数据库

创建集合 

db.createCollection(collection_name)

e.g.   
创建一个class1的集合
db.createCollection("class1")

创建集合2
当向一个集合中插入数据的时候,如果这个集合不存在则会自动创建

db.collecionName.insert(...)

e.g.  如果class2不存在则自动创建    db.class2.insert({"name":'Tom','age':17,'sex':'m'})

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

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


删除集合
db.collectionName.drop() 

e.g.   db.class.drop()   #删除class这个集合

集合的重命名

db.collectionName.renameCollection("new_name")

e.g.  将class2重命名为class0
db.class2.renameCollection("class0")


文档

mongodb中数据的组织形式 --》 文档

mongodb文档 :以键值对形式组成的类似字典的数据描               述形式

键: 即文档的域

键的命名规则:
1. utf-8字符串
2. 不含有'\0' 通常不用 .  $
3. 一个文档中的键不能重复

* 文档中的键值对是有序的
* 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. 集合中文档的结构层次不宜过多


插入文档

db.collectionName.insert()

插入单个文档

e.g.
db.class0.insert({name:"HanMei",age:17,sex:'w'})

* 插入数据时域名可以不加引号
* 查看插入结果  db.class.find()
* _id 为系统自动添加主键,如果自己写_id则为自己设   定的值,但是仍然不可重复
* 一个集合中的文档是有序的

插入多个文档
db.collectionName.insert([{},{},{}])

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

save() 插入文档

db.collectionName.save()

e.g.   db.class1.save({name:'Lily',age:13,sex:'w'})

* 如果不加_id域时用法同insert()
* 如果加_id,此_id值存在则save表示修改该文档。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值