存储系统和数据库|青训营笔记

92 阅读3分钟

存储系统

存储系统:一个提供了读写,控制类接口,能有效安全地将数据持久化的软件,就可以叫做存储系统(非官方定义)

user--存储数据--。。。。(network非单机的需要)

特点:需要高性能,受硬件影响极大,IO类的代码需简洁(确保高性能,延迟低),

  • 需要高性能
  • 受硬件影响极大
  • IO类的代码需简洁(确保高性能,延迟低)
  • 非io类的代码要复杂(确保没什么漏洞,对可能出现的异常情况进行错误处理)

缓存 很重要

拷贝 CPU花销大,慎用

需要抽象统一的接入层以对应各种硬件设备

RAID技术

目的:高性能,高可靠性(备份),便宜

RAID 0:多块小容量磁盘的简单组合,没有容错处理

RAID 1:一块磁盘对应一块备份数据的镜像磁盘,真实空间利用率为50%

RAID 0+1 :同时具备上面两个的特点,但是需要2倍于0或1的磁盘

数据库

分为关系型数据库和非关系型数据库

都为存储系统,但具有更加强大的功能

关系:集合,任意元素组成的若干有序偶对,体现事物间的关系

关系代数:对关系作运算的抽象查询语言

SQL:一种领域特定语言,关系代数表达形式

关系型数据库

结构化数据友好,表的形式管理,更加清晰明了

支持事务(ACID):

  • A:原子性,指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

例:银行转钱事务:两个用户A和B

A转账给B:A少钱,B多钱同时成功或同时失败

  • C:一致性,事务前后数据的完整性必须保持一致,符号逻辑运算

A转账200给B,那么A就-200,B就+200,而不是+300,总数不变

  • I:隔离性,是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

要设置隔离级别

读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)

  1. 读未提交,也就是会读取其他事务还未提交的数据,也就是脏读
  2. 读已提交,也就是只读取其他事务已经提交的数据。但是会出现的问题是不可重复读,也就是在一个事务里,读取数据1,原来数据1=a,但是另一个事务同时修改了数据1,改成了b,那么第一个事务再读取一下这个数据1,这个数据1就=b
  3. 可重复读,也就是在一个事务里,不管读这个数据几次,无论这个数据是否被其他事务修改,读取都是返回一样的值,但是会出现的问题是幻读,幻读则是数据行数可能会变更,例如我读取字段1=a的值,一开始读到两行数据,如果这个时候另一个事务插入了一行,那么可能再次读取时就会读到3行数据
  4. 可串行化,也就是可以看作这些事务是串行执行的,不会出现上面的任何问题,当然性能也是最差的
  • D:持久性,一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

支持复杂查询语言如SQL

非关系型数据库

不严格的结构化,半结构化

部分引用: zhuanlan.zhihu.com/p/174554969