什么是关系型数据库?
是创建在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,
同时也是一个被组织成一组拥有正式描述性的表格(二维表),该形式的表格做用的实
质是装载着数据项的特殊收集体,这些表格中的数据能以许多不一样的方式被存
取或从新召集而不须要从新组织数据库表格(即表与表之间的联系)。
nosql和关系型数据库比较?
优势:
1)成本:nosql数据库简单易部署,基本都是开源软件,
不须要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)查询速度:nosql数据库将数据存储于缓存之中,
关系型数据库将数据存储在硬盘中,天然查询速度远不及nosql数据库。
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,
因此能够存储基础类型以及对象或者是集合等各类 格式,而关系数据库则只支持基础类型。
4)扩展性:关系型数据库有相似join这样的多表查询机制的限制致使扩展很艰难。
缺点:
1)维护的工具和资料有限,由于nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql语句的支持,若是不支持sql这样的工业标准,将产生必定用户的学习和使用成本。
3)不提供关系型数据库对事物的处理。正则表达式
MongoDB简介:sql
MongoDB是一个非关系型数据库 他是NOSQL数据库技术相对成熟的一个文档型数据库mongodb
MongoDB的数据管理系统是由C++语言编写的 MongoDB支持丰富的增删改查功能而且支持shell
关系型所没有的更多数据类型 虽然支持丰富的增删改查可是他不支持SQL语句 数据库
MongoDB有着丰富的编程语言接口 例如:Python、PHP、C++、JavaScript、C#等编程
MongoDB也被誉为着最像关系型数据库的NoSQL数组
MongoDB(芒果数据库)
数据存储发展阶段:
文件管理阶段(.txt、.doc、.xls....)
优势:
数据能够长期保存 有必定的格式化规范 能够大量存储 使用简单方便
缺点:
数据一致性差 用查找修改不方便 数据冗余
数据库管理阶段:
优势:
数据组织结构化 下降了冗余 提升了增删改查的效率 便于扩展
方便程序调试作自动化管理
缺点:
数据库的使用专业性较强 相对比较复杂
基本概念
什么是数据:
可以输入到计算机中并被识别处理的信息的集合
数据结构:
相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成
数据库:
按照数据结构,存储管理数据的厂库
是在数据管理系统软件管理和控制下建立在必定介质上的数据集合
数据管理系统:
数据管理软件 用于维护管理数据库
数据库系统:
由数据库、数据管理系统,开发工具等组成的工具集合
关系型数据库:
采用关系模型来组织数据结构的数据库(关系模型:二维表)
Oracle(甲骨文)、DB2(IBM)、SQL_Server(微软)、MySQL、Sqlite
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++、JS、C#)
5.在NoSQL中技术相对比较成熟
MongoDB的安装:
自动安装:
sudo apt-get install mongodb
默认安装路径:/var/lib/mongodb
配置文件:/etc/mongodb.conf
命令集:/usr/bin 或 /usr/local/bin
手动安装:
1.下载合适版本:www.mongodb.com
2.选择合适位置解压:/usr/local 或 /opt
3.将bin文件夹下的命令集加入到环境变量
PATH = $PATH:/opt/mongodb/bin
export PATH
永久设置:能够将以上两句写入/etc/rc.local
4.重启系统
whereis 软件名:
查看一个软件的路径
Mongodb命令:
设置数据库存储的位置:
mongod --dbpath 目录
设置数据库端口:
mongod --port 8080
默认27017
mongodb的交互模式,操做数据库:
mongo 进入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 含义
database database 数据库
table collection 表/集合
column filed 字段/域
row document 记录/文档
index index 索引
建立库:
use databaseName
建立一个stu的数据库
use stu
实际use是选择使用哪一个数据库,当选者使用的数据库不存在时就会自动化建立
只有向数据库插入数据时才会真实被建立出来 而use后不会立刻被建立
查看库:
show dbs
数据库命名:
1.使用UTF-8字符
2.不能含有 . 、 / 、 \ 、"\0" 字符
3.长度不能超过64字节
4.不能和系统数据库重名
习惯上使用小写字母命名
系统数据库:
admin:存放用户和权限
local:存放本地化数据(不让被共享)
config:存储分片信息
db:
mongo系统全局变量。绑定当前正在使用的数据库对象
当不使用use选择任何数据库时,db表示test 此时插入数据会建立test数据库
数据库备份和恢复:
备份:
mongodump -h 主机地址 -d 库名 -o 文件名
恢复:
mongorestore -h 主机地址: 端口号 -d 库名 文件路径
若是库不存在会自动建立库
数据库的监测:
mongostat
insert query update delete :每秒增查改删的次数
command 每秒运行命令的次数
flushes 每秒和磁盘的交互次数
vsize 使用虚拟内存的大小
mongotop
监测每一个数据读写时长
ns 数据集合
total 总时长
read 读时长
write 写时长
删除数据库
db.dropDatabase()
删除db所表明的数据库
建立集合:
db.createCollection(“集合名”)
向集合中插入数据时 若是这个集合不存在会自动建立
db.集合名.insert(...)
查询集合:
show collections
show tables
集合命名规则:
1.合法的UTF-8字符串
2.不能有“\0”
3.不能以system. 开头 是系统保留前缀
4.不能和关键字重名
删除集合:
db.集合名.drop()
集合的重命名:
db.集合名.renameCollion("新集合名")
文档:
MongoDB中的数据组织形式
MongoDB文档:
以键值对的形式组成的相似于字典的数据结合
是对数据的一种描述
键:
即文档的域
命名规则:
1.utf-8字符串
2.不能有“\0”
3.一个文档中键不能重复
文档中键值对是有序的
mongodb严格区分大小写
值:
即文档存储的数据 也就是mongodb支持的数据类型
值类型:
整型数 1 2 3 -1 -2
布尔类型 true false
浮点型 3.1415926
Array 数组[1,2,3]
Timestamp 时间戳
Data 时间日期
Object 内部文档
Null 空值
String 字符串
Symbol 特殊字符串
binary data 二进制字符串
code 代码
regex 正则表达式
ObjectID ObjectID对象
ObjectID:
若是在插入文档时没有指定_id域,则系统会自动添加该域做为主键
值则是在一个ObjectID类型数据
"_id" : ObjectId("5b764646d4ff0ad8f415f977")
24 位 16进制数 --> 保证全部的_id值的惟一性
8位的文档建立时间 6位机器ID 4位进程id 6位计数器
集合中的文档:
1.集合中的文档不必定域的个数相同
2.集合中的文档不必定有相同的域
关系型数据库中由表决定字段
MongoDB数据库中由文档决定域
集合设计原则:
集合的文档应该尽量的描述同一类内容,有更多相同的域
同一类数据信息,尽可能不要过多的分散集合存放
集合中文档的层次不要包含太多
插入文档:
db.集合名.insert({name:"tom", age: 15})
save插入文档:
db.集合名.save({name:"tom", age: 15})
插入文档时的键能够不加引号
_id为系统自动天机为主键,若是本身写也能够,可是不能重复
插入多条文档:
db.集合名.insert([{name:"tom", age: 15}, {}, {}...])
save插入文档:
db.集合名.save([{name:"tom", age: 15}], {}...)
注:
若是不使用_id则save用法同insert同样
若是加入_id项 此时该文档已经存在是则会覆盖原有文档