什么是关系型数据库?
是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,
同时也是一个被组织成一组拥有正式描述性的表格(二维表),该形式的表格作用的实
质是装载着
数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存
取或重新召集而不需要重新组织数据库表格(即表与表之间的联系)。
nosql和关系型数据库比较?
优点:
1)成本:nosql数据库简单易部署,基本都是开源软件,
不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)查询速度:nosql数据库将数据存储于缓存之中,
关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,
所以可以存储基础类型以及对象或者是集合等各种 格式,而关系数据库则只支持基础类型。
4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
缺点:
1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql语句的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
3)不提供关系型数据库对事物的处理。
MongoDB简介:
MongoDB是一个非关系型数据库 他是NOSQL数据库技术相对成熟的一个文档型数据库
MongoDB的数据管理系统是由C++语言编写的 MongoDB支持丰富的增删改查功能并且支持
关系型所没有的更多数据类型 虽然支持丰富的增删改查但是他不支持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项 此时该文档已经存在是则会覆盖原有文档