微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库的简单介绍

关系型数据库与非关系型数据库


关系型数据库MysqL /oracle/sql server/sqlite
    优点:
    1.易于维护:都是使用表结构,格式一致;
    2.使用方便:sql语言通用,可用于复杂查询
    3.复杂操作:可用于一个表以及多个表之间非常复杂的查询
    缺点:
    1.读写性能比较差,尤其海量数据的高效率读写;
    2.固定的表结构,灵活度不够
    3.高并发读写需求,传统的关系型数据库来说,硬盘I/O一个很大的瓶颈


非关系型数据库(nosql):redis / hbase /mongoDB
    类型:
    文档数据库、键值数据库、宽列存储和图形数据库
    优点:
    1.格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型
    2.速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
    3.高扩展性
    4.成本低
    缺点:
    1.不提供sql支持
    2.无事务处理
    3.数据结构相对复杂,复杂查询方面稍欠




MysqL数据库的四大特征、四大隔离级别、三大范式、三大现象

一.数据概念
数据库系统中,多个事务并发执行时,针对数据库不同的隔离级别,可能会出现一些问题。可能出现的问题有:脏读,不可重复读,幻读

1.脏读:
    假设A和B两个事务都出现了并发,A先读取了表的数据,然后更新了表,但是这时A事务还没提交。此时B事务读取了表数据,这时候B实际上读取的是A
    事务更新完的表数据。如果A事务提交,那么该数据有意义;如果A事务回滚,B读取的数据就没有意义,这就是脏读
2.不可重复读:
    就是字面意思,不能重复读同一个数据,如果重复读的话,有可能返回的结果不一样。事务A先读取了表的数据,没有进行提交。然后事务B更新了表的数据,
    此时事务A又读取了表的数据,两次数据不一样,A无法处理。
3.幻读:
    事务A读了一次表,最后得到的ID是3.事务B也读了一次表,得到ID是3.此时事务A先插入了一条数据,然后读了表,最新的ID是4;然后事务B也插入了一条
    数据,读取表,得到ID是5.此时就是幻读。 删除数据,修改数据都会有类似发生的情况
    
二.数据库的隔离级别
    读未提交、读已提交、可重复读、可串行化
    读未提交:隔离级别最低,隔离度最弱。 脏读、不可重复读、幻读都可能会发生
    读已提交: 解决了脏读问题,存在不可重复读、幻读问题
    可重复读:存在一定的幻读可能,MysqL认的隔离级别
    可串行化:级别最高,问题都解决,但是性能最低

三.事务的四大特性:
事务简介
1.在MysqL中只有使用了Innodb数据库引擎的数据库或者表才支持事务
2.事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行
3.事务用来管理insert,update,delete语句
特性:原子性、一致性、隔离性、持久性
1.原子性(Atomic):事务包含的所有数据库操作,要么全部都成功,要么全部失败,不可以分开执行
2.一致性(Consistent):将一个大事务拆分成若干小事务,小事务完成的数据状态与使用一个大事务完成后的数据状态一致
3.隔离性(Isolated):一个事务的执行不会被另一个事务干扰
4.持久性(Durable):事务执行的结果持久化到磁盘中
事务的操作
start transaction;  #开启事务
#sql语句 增删改查
savepoint 节点名;  #保存节点
rollback;    #取消全部事务 回滚
rollback to 节点名 #回到某个节点
commit    #提交

四.数据库设计的三大范式
1.第一范式(确保每列保持原子性)
    比如某个人的地址,可以拆分成 (省份 城市 详细住址)三个字段,这样对用户进行分类非常方便,也会提高数据库性能
2.第二范式(确保表中的每列都和主键相关)
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)


 



Redis,MongoDb的特点
Redis
    优点:
    1.支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、
    2.支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失  的手段。
    3.支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
    4.单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
    5.支持pub/sub消息订阅机制,可以用来进行消息订阅通知
    6.支持简单的事务需求,但业界使用场景很少,并不成熟
    缺点:
    1.Redis只能使用单线程,性能受限于cpu性能,故单实例cpu最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。
    2.支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。
    3.Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用


MongoDb
    优点:
    1.更高的写负载,MongoDB拥有更高的插入速度。
    2.处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。
    3.高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点(数据中心)故障转移。
    4.快速查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库查询速度。
    5.非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响,整个过程会非常快速
    缺点:
    1.不支持事务。
    2.MongoDB占用空间过大 。
    3.MongoDB没有成熟的维护工具




   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐