什么是关系型数据库?
是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,
同时也是一个被组织成一组拥有正式描述性的表格(二维表),该形式的表格作用的实
质是装载着
数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存
取或重新召集而不需要重新组织数据库表格(即表与表之间的联系)。
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项 此时该文档已经存在是则会覆盖原有文档
- Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)
断网了2天 今天补上 聚合操作: 对文档的信息进行整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配 ...
- Python全栈 MongoDB 数据库(数据的修改)
修改操作符的使用 $set 修改一个域的值,增加一个域 阿哲年龄修改为33 db.class1.update({name:'阿哲'},{$set:{age:33}}) 如果sex域不存在则 ...
- Python全栈 MongoDB 数据库(Mongo、 正则基础、一篇通)
终端命令: 在线安装: sudo apt-get install mongodb 默认安装路径 : /var/lib/mong ...
- Python全栈 MongoDB 数据库(数据的查找)
非关系型数据库和关系型数据库的区别? 不是以关系模型构建的,结构自由 非关系型数据库不保证数据一致性 非关系型数据库可以在处理高并发和海量数据时弥补关系数据库的不足 非关系型数据库在技术上没有关系 ...
- Python全栈 MySQL 数据库 (索引、数据导入、导出)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 表字段重命名(change) alter table 表名 ...
- Python全栈 MySQL 数据库 (简述 、安装、基本命令)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 一个月的python已经结束了 下面就是数据库了 先说M ...
- Python全栈 MySQL 数据库 (引擎、事物、pymysql模块、orm)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 存储引擎(处理表的处理器) 基本操作: ...
- Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)
为了梦想与了信仰 开局一张图 主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用 先删库 再跑路..... ...
- python全栈开发 * 进程理论 进程创建 * 180724
一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...
随机推荐
- SPFA 全面讲解
SPFA全面讲解 --最短路高效算法 标签: 最短路 简介:SPFA 是1994年在西安交通大学段凡丁同学所提出,是将Dijsktra以及Bellman-Ford两种最短路算法完美结合的一个算法,效率 ...
- 【luoguP1238】【NOIP2014】生活大爆炸版剪刀石头布
生活大爆炸版剪刀石头布 ——[传送门] 这道题可以原原本本地说得上是一道水题了,通过判断两人的出拳不同给分然后统计输出.就是对于游戏得分 ...
- 微软.net framework 源码学习
1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com ...
- Git相关内容
先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...
- Restframework中的Request
1.介绍 该篇博客主要介绍restframework内置的Request类,它扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 如: 在APIView中封装的r ...
- golang-Tag
Tag 理解 Golang中可以对struct定义Tag 例如: type TestTag struct{ UserName string `json:"name"` Age In ...
- SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot14-redis-mq/ 本文出自方志朋的博客 这 ...
- Linux服务器SMB服务挂载目录
挂载方法 mount -o username=账号,password=密码 //SMB服务器IP/共享目录 /挂载点 smbclient链接 smbclient //SMB服务器IP/共享目录/ -U ...
- php第二节(变量、常量)
<?php /** * 类型转换 * 自动转换 数据在运算过程中自动转换 * 空字符串 false * "0" false * null false * 0 false * ...
- 爬虫——urllib.request库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib.request.(在python2.x中为urllib2 ...