zoukankan      html  css  js  c++  java
  • 数据库的简单介绍

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


    关系型数据库: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.第三范式(确保每列都和主键列直接相关,而不是间接相关)

    五.Mysql数据库中常用的几种引擎以及区别

    常用的包括三种:InnoDB、Myisam、Memory

    InnoDB和Myisam的默认索引是B+ tree,Memory的默认索引是hash

    区别

    1.InnoDB支持事务,支持外键,支持行级锁,写入数据时操作快

    2.Myisam不支持事务,不支持外键,支持表级锁,支持全文索引,读取数据快

    3.Memory所有的数据都保留在内存中,不需要进行磁盘的IO所以读取的速度很快,但是一旦关机的话表的结构会保留但是数据就会丢失,表支持Hash索引,因此查找速度很快




    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没有成熟的维护工具




       

  • 相关阅读:
    修改Putty终端目录(ls命令)显示颜色
    在循环中进行提交的测试
    远程连接Redhat Linux配置
    如何部署Silverlight及Web Service
    SQL2008 的收缩日志
    WPF中DataGrid使用初步
    常用SQL
    DataGridView转datatable
    Ext程序规划入门
    下一代C#里的async和await
  • 原文地址:https://www.cnblogs.com/satty/p/14081284.html
Copyright © 2011-2022 走看看