MongoDB芒果数据库

数据存储阶段

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

优点:数据可以长期保存;数据有一定格式化规范;可以大量存储;使用简单方便

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

数据库管理阶段

优点:数据组织结构化,降低了冗余;提高了增删改查的效率;便于扩展,方便程序调试做自动化处理

缺点:数据库的使用专业性较强,相对比较复杂

几个概念

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

数据结构:研究组成数据集合中数据之间关系的学科

数据库:按照数据结构,存储管理数据的仓库。是在数据管理系统软件软件管理和控制下创建在一定介质上的数据集合

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

数据库系统:用数据库,数据库管理系统,开发工具等组成的工具

关系型数据库(Oracle、DB2、SQLServer、Mysql、sqlite)

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

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

缺点:每次操作都需要SQL语句解析,消耗较大;不能很好的满足并发需求,应对海量数据爆发力不从心;关系型数据库内存存在大量的加锁操作,读写能力受到限制;数据不够灵活,有时会导致结构复杂化

非关系型数据库 (NoSql --》 not  only  sql)

优点:高并发,读写能力强、扩展性强、使用灵活、弱化了数据结构、降低数据一致性

缺点:通用性差,并没有sql那样统一的操作语句;操作灵活,容易混乱;没有join等复杂操作,版本更新快

Noaql的使用情况

1、数据的一致性要求低

2、处理数据的海量并发

3、数据库大小不容易确定。需要分布扩展

4、给定的数据结构构建立非关系模型更加容易

Nosql分类:

键值数据库  Redis

列存储数据库

文档数据库  MongoDB

图形数据库

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

1、由c++编写的数据库管理系统

2、支持丰富的增删改查功能

3、支持丰富的数据类型

4、支持众多的编程语言结构(python php c++ js C#)

5、在NoSql中技术相对比较成熟

MongoDB安装

自动安装

sudo apt-get install mongodb

默认安装路径:/var/lib/mongodb

配置文件:/etc/mongodb.conf

命令集:/usr/bin  /usr/local/bin

whereis 软件名:查看一个软件的位置

手动安装

1、下载合适版本的mongodb

www.mongodb.com  ---> get Mongodb  --> community  server

2. 选择合适的位置解压 (/usr/local   /opt)

解压后得到mongodb文件夹

3. 将文件夹下bin文件夹加入到环境变量

(bin中就是命令集)

PATH=$PATH:/opt/mongodb.../bin

export PATH

将以上两句写入 /etc/rc.local

4. 重启系统

mongodb命令

mongo  --dbpath   目录  设置数据库的存储位置   e.g.     mongdb  --dbpath  dbs

mongo --port 8080  设置数据库的端口,默认是27017

mongo  进入mongo shell,mongodb的交互模式,用于操作mongodb数据库,

quit()或者ctrl+c  退出mongo shell

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       mongdb    含义

database     database    数据库

table       collection   表/集合

column      field           字段/域

row        document  记录/文档

index       index           索引

ues databaseName  创建数据库  e.g.   use stu 创建一个叫stu的数据库

* 实际ues是选择使用哪个数据库。当选择的数据库不存在是就会自动创建

* 只有向数据库中插入数据时数据库才会被真实创建出来,而use后不会马上创建

show dbs  查看数据库

系统数据库

admin:存放用户的权限

local:存放本地化数据

config:存放分片信息

数据库的命名规则

1、使用utf-8字符

2、不能含有空格  .  /   \   '0'字符

3、长度不能超过64字节

4、不能和系统数据库重名

* 习惯上使用小写字母,表达数据库的含义

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

* 当不使用use选择任何数据库的时候,db表示test。此时插入数据则创建test数据库

数据库的备份和恢复

备份   mongodump -h dbhost -d dbname -o dbdir

e.g.  将127.0.0.1上的stu数据库备份到bak目录中

mongodump -h 127.0.0.1 -d syu -o bak

恢复 mongostore -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

数据库的检测命令

mongostat

insert query updata delete:每秒增删改查的次数

command  每秒运行命令的次数

flushes  每秒和磁盘交互的次数

vsize  使用虚拟内存大小

mongotop  检测每个数据读写时长

ns    total  read  write

数据集合 总时长  读时长  写时长

db.dropDatabase()  删除db所代表的数据库

db.createCollection(collection_name)  创建集合,e.g. 创建一个叫class1的集合,db.createCollection('class1')

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

db.collection.insert(...)  e.g.如果class2不存在则创建这个集合并插入数   db,class2.insert({"name":"Lucy","age":18})

show tables 查看集合

show collections  查看集合

集合的命名规则:

1、合法的utf-8字符串

2、不能有'\0'

3、不能以system开头。是系统的保留前缀

4、不能和关键字重复

db.collection.drop()  删除集合  e.g. 删除class2集合 db.class2.drop()

db.collection.renameCollection("new_name")  集合重命名

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

文档

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

mongodb文档:以键值对的形式组成的类似于字典的数据结构结合。是对数据的一种描述

键:即文档的域

命名规则
1. utf-8 格式字串
2. 不能有'\0'
3. 一个文档中的键不能重复

* 文档中键值对是有序的,mongodb严格区分大小写

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

bson ---> json ----> JavaScript

值类型        数值

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

ObjectId

"_id" : ObjectId("5b764646d4ff0ad8f415f977")

_id : 如果在插入文档时没有指定_id域,则系统会自动添加该域作为主键。值则是一个ObjectId类型数据

24 位 16进制数  --》 保证所有的_id值的唯一性

8位的 文档创建时间    6位  机器ID  4位 进程id   6位计数器

集合中的文档

* 集合中的文档不一定域的个数相同

* 集合中的文档不一定有相同的域

(关系型数据库: 表决定字段,mongodb中 文档决定域

集合设计原则

1. 集合中的文档应该尽可能描述同一类内容。有更多相同的域

2. 同一类数据信息,不要过多分散集合存放

3. 集合中文档的层次不要包含太多

插入文档

db.collection.insert()

插入单个文档

e.g.

db.class0.insert({'name':"Lucy","age":18})

db.class0.insert({name:"Tom",age:17,sex:'m'})

*  查看插入结果 : db.class0.find()

*  文档中键可以不加引号

*  _id为系统自动添加主键,如果自己写也可以,但是不能重复

插入多条文档

db.collection.insert([{},{},{}])

e.g.

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

save 插入文档

db.collection.save()

e.g.

db.class0.save({name:'Davil',age:16,sex:'m'})

db.class1.save([{name:'小白',age:30,sex:'w'},{name:'小陈',age:34,sex:'m'}])

* 如果不适用_id则save用法同insert一样

* 如果加_id项,此时文档已经存在时则会替换原有文档

MongoDB day01的更多相关文章

  1. day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权

    day01 mysql      一.认识mysql     关系型数据库:         最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录         关系型: oracle,  ...

  2. day01 MySQL发展史

    day01 MySQL发展史 今日内容概要 数据库演变史 软件开发架构 数据库本质 数据库中的重要概念 MySQL下载与安装 基本SQL语句 今日内容详细 数据库演变史 # 1.文件操作阶段 jaso ...

  3. 【翻译】MongoDB指南/聚合——聚合管道

    [原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...

  4. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  5. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  6. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  7. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  8. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

随机推荐

  1. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  2. java高并发下的数据安全

    高并发下的数据安全 我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的).如果是My ...

  3. Recording︱有价值的各类AI、机器学习比赛心得、经验抄录

    今年kaggle华人优胜团队很多,所以经验.心得不少,都是干货慢慢收集. 一.[干货]Kaggle 数据挖掘比赛经验分享 github:https://github.com/ChenglongChen ...

  4. admin- 源码解析(流程)

    首先我们需要了解一个知识点:---单例模式--- 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中 ...

  5. Nodejs下express+ejs模板的搭建

    nodejs的环境配置,这里就不做说明了.在nodejs安装后的步骤在这里说明一下 首先 全局安装express  npm install -g express-generator 安装ok后,接着 ...

  6. laravel 修改重置密码模板

    Laravel里我们可以使用php artisan make:auth来生成一套默认的登陆注册重置邮箱的Authentication System,但是如何修改系统发送给用户的重置密码邮件的样式和内容 ...

  7. phpcms tag页调用缩略图

    \phpcms\modules\content\tag.php 找到: 'title, description, url, inputtime, style' 改成:'title, thumb, de ...

  8. 每天一个linux命令(文件操作):【转载】find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  9. Uoj 441 保卫王国

    Uoj 441 保卫王国 动态 \(dp\) .今天才来写这个题. 设 \(f[u][0/1]\) 表示子树 \(u\) 中不选/选 \(u\) 时的最小权值和,显然有:\(f[u][0]=\sum ...

  10. 用firefox获取html页面元素的Xpath

    Xpath在分析网页尤其是采集固定格式数据时,非常有用,且比正则表达式和首尾截取式更加简便.准确! 工具/原料   FireFox FireBug XpathChecker UserAgentSwit ...