存储与数据库系统 | 青训营

71 阅读2分钟

存储与数据库

存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,称为存储系统

系统特点:

  • 容易受硬件影响
  • 性能敏感
  • 存储系统代码简单,但在IO或非IO的错误、异常处理方面代码较为全面复杂

存储器层级结构(金字塔型):

image.png

数据如何从应用到存储介质

image.png 参考The Linux Programming Interface(第13章 FILE I/O BUFFERING),单机存储系统大致为:

用户数据(user data)在用户内存区通过标准分配库调用(stdio library calls)进入标准分配缓冲区(stdio buffer),该区域会强制缓冲区刷新(to force buffer flush)以达到将位于标准分配缓冲区的数据进入I/O系统调用(I/O system calls)区以便进行写入磁盘(disk)的操作; 同时,标准分配库调用区在每个I/O调用上自动刷新(make flushing automatic on each I/O call),也达到前面所述作用。 在数据通过I/O系统调用写入内核缓冲区缓存(kernel buffer cache)时,内存内核调用fsync()、fdatasync()、sync()等函数进行强制缓存区刷新,做到将内核缓存区缓存送进内核启动的写入(kernel-initiated write)中,下一步写入磁盘; 同时I/O系统调用会通过调用open(path,flags|O_SYNC,mode)函数进行I/O调用自动刷新,达到前面所述效果。

其中存储栈上缓存重要,贯穿整个存储体系

RAID技术

Redundant Array of Inexpensive Disks

RAID出现于单块大容量磁盘的价格>多块小容量磁盘单块磁盘的写入性能<多块磁盘的并发写入性能单块磁盘的容错能力有限,不够安全的背景下

数据库

不同于存储系统,数据库系统是一种用于组织、存储和管理数据的软件系统,以特定的数据模型和语言来存储数据。

关系=集合=两个实例间的联系 SQl=一种DSL=方便人类阅读

关系型数据库

存储系统,除此之外发展出其他能力

  • 结构化数据友好
  • 支持事务
  • 支持复杂查询语言

非关系型数据库

存储系统,但一般不要求严格的结构化

  • 半结构化数据友好
  • 可能支持事务
  • 可能支持复杂查询语言

数据库vs经典存储

结构化数据管理

一条用户注册数据

  • 写入关系型数据库,以表形式管理
  • 经典存储是写入文件,自行定义、管理结构

事务能力

数据库支持事务的优越性 ACID特性:

  • Atomicity:事务要么全部完成,要么全部取消。 如果事务崩溃,状态回到事务之前(事务回滚)。
  • Isolation:如果2个事务 T1 和 T2 同时运行,事务 T1 和 T2 最终的结果是相同的,不管 T1和T2谁先结束。
  • Durability:一旦事务提交,不管发生什么(崩溃或者出错),数据要保存在数据库中。
  • Consistency:只有合法的数据(依照关系约束和函数约束)才能写入数据库。

经典存储不支持事务,对比之下就显复杂

查询能力

体现在数据库进行数据查询可以使用SQL语句

select xxx from yy where zzz...

而经典存储的数据查询要写代码

for each data{
    if (user_name&&xx&&xxx){
        mark in list
        }
        ....
 }

存储系统和数据库系统区别

存储系统用于存储数据的硬件和软件系统,其目的是提供大容量存储空间便用户能够保存大量数据。该系统可远程可本地。

数据库系统是一种用于组织、存储和管理数据的软件系统,以特定的数据模型和语言来存储数据。

  • 数据库系统通常在存储系统之上运行,使用存储系统提供的空间来存储数据
  • 存储系统重点在于存储数据,数据库系统重点在于组织。