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