数据持久化

article/2025/8/23 19:35:55

数据持久化

  • 企业数据架构
  • 存储技术
  • 存储架构

企业数据架构

企业数据架构
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。

数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL数据库、图片和视频等文件的对象存储数据库等。

其中缓存数据库是应用内存存储数据,其余的存储类型都是持久化的存储。

  1. 联机交易区,即需要进行OLTP(On-line Transaction Processing,联机事务处理)的数据区域,与统计分析区相比,数据为近期产生的,热度较高,数据量相对较小,并发较高,要求实时处理。

  2. 统计分析区,即需要进行OLAP(On-line Analytical Processing,联机分析处理)的数据区域,单个数据的查询频率较OLTP更低,但数据量大,通常会涉及较复杂的聚合计算。

联机交易区和统计分析区之间使用ETL工具如Kattle或其他数据复制技术来实现数据的导入。

存储技术

RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,通常简称为磁盘阵列。

RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,能提供比单个磁盘更高的存储性能和数据冗余的技术。当单块磁盘出现故障时,RAID会根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在RAID中的多个磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合I/O带宽。磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。

RAID中主要有三个关键概念和技术
1)镜像(Mirroring)

镜像是将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。镜像的写性能要稍低,确保数据正确地写到多个磁盘需要消耗更多的时间。

2)数据条带(DataStripping)

数据条带是将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上的数据进行读写操作,从而获得非常可观的I/O性能提升。

2)数据校验(Data Parity)

数据校验是利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以在很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。

通过组合运用这三种技术,可以把RAID分为不同的等级,以满足不同数据应用的需求。实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID3、RAID5、RAID6和RAID10。

(1)RAID0

RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并发读访问。由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的。

RAID0具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。因此,RAID0一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

(2)RAID1

RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统会自动从镜像磁盘读取数据,不会影响用户工作。

RAID1与RAID0刚好相反,是为了增强数据安全性而使两块磁盘数据呈现完全镜像。RAID1拥有完全容错的能力,但实现成本高。RAID1应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

(3)RAID3

RAID3采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘。RAID3完好时读性能与RAID0完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。向RAID3写入数据时,必须计算所有同条带的校验值,性能较低。

RAID3只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用于大容量数据的顺序访问应用,如影像处理、流媒体服务等。目前,RAID5算法不断改进,在大数据量读取时能够模拟RAID3,而且RAID3在出现坏盘时性能会大幅下降,因此常使用RAID5替代RAID3来运行具有持续性、高带宽、大量读写特征的应用。

(4)RAID5

RAID5和RAID3类似,但校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。

RAID5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID5这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。是目前综合性能最佳的数据保护解决方案。RAID5基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

(5)RAID6

RAID6引入双重校验的概念,可以保证阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。RAID6思想最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解二元方程来重建两个磁盘上的数据。RAID6具有快速的读取性能、更高的容错能力。但是,它的成本要高出RAID5许多,写性能也较差,并且设计和实施非常复杂。因此,RAID6很少得到实际应用,主要用于对数据安全等级要求非常高的场合。

(6)RAID10

RAID10也称为RAID1+0,实际是将RAID1和RAID0标准结合的产物。RAID10技术需要至少4块硬盘来组建,先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1按阵列实施RAID0技术。RAID10方案造成了50%的磁盘浪费,但是它提供了200%的速度和防止单磁盘损坏的数据安全性。

存储架构

存储架构

扇区是磁盘的最小存储单位,多个连续的扇区组成一个块,也叫物理块。

文件由多个不连续的物理块组成,文件系统使用块来读取设备,块是文件系统的最小单位。使用块存储信息的设备叫作块设备,块设备是I/O设备中的一类,每个块都有自己的地址。

文件系统是操作系统在存储设备上组织文件的方法,是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

  1. DAS(Direct-attached Storage)

直连存储存储通过SAS、iSCSI或FC等接口与服务器直接连接,中间没有任何转换交换设备,作为服务器内置硬盘容量的扩充,具有一定的灵活性和限制性。RAID通常在服务器端进行设置,通常将单一存储与服务器直连也称为DAS。

  1. NAS(Network Attached Storage)

网络附加存储存储设备通过标准的网络拓扑结构(以太网)添加到一群计算机上,可以理解为服务器+硬盘+文件系统软件的组合。存储可配置网络IP地址,直接接入IP局域网络,RAID在存储器端进行设置并配置文件共享功能。NAS利用现有以太网网络,因此部署灵活,成本非常低,基于TCP/IP协议的特性可以提供丰富的网络服务,基于文件的形式提供数据的存储及备份,但是TCP/IP协议决定了数据传输的数据打包及解包,会占用系统资源,传输速率受限于以太网的速率。

在存储功能上面有一个文件系统,NAS是文件存储,聚焦在应用、用户和文件以及它们共享的数据上,NAS通过网络共享协议使用一个文件系统,应用服务器和NAS之间使用的协议有SMB、NFS以及AFS等网络文件系统协议。对于应用服务器来说,NAS就是一个网络上的文件服务器,可以上传、下载文件。

  1. SAN(Storage Area Network)存储区域网络

SAN通过光纤通道交换机连接存储阵列和服务器主机,成为一个专用存储网络。RAID在存储器端进行设置。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据放在哪里,服务器都可直接存取所需的数据。

SAN存储使用光纤网络进行传输,并且独立于应用网络,可以提供非常高的带宽,数据的传输基于块协议,无需对数据进行处理,直接进行传送,因此性能最好。另外光纤线路可以提供远距离的高带宽链路,可以实现数据中心的异地灾备应用。但是SAN部署复杂,成本较高。NAS和SAN又叫网络存储,都是使用RAID技术提供冗余和并发读写,两者最本质的区别在于文件管理系统位置。在SAN存储架构中,文件系统是部署在每个应用服务器上,SAN是块存储,聚焦在磁盘、磁带以及连接它们的基础结构,而把文件系统的抽象交由应用服务器负责。

SAN的客户端和服务器端之间的协议有Fibre Channel、iSCSI、ATA overEthernet(AoE)和HyperSCSI。对于应用服务器来说,SAN就是一块磁盘,可以对其格式化、创建文件系统并挂载。

  1. OSS(Object Storage Service)对象存储

传统的网络存储价格较贵,扩展数量有限,互联网生态下的云存储则用数量弥补质量,以大量低成本的普通PC服务器组成网络集群来提供服务。相比传统的高端服务器,同样价格下分布式存储提供的服务更好、性价比更高,且新节点的扩展以及坏旧节点的替换更为方便。

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠性的云存储技术,适合存放任意类型的文件。对象和存储空间是对象存储的核心概念,围绕对象和存储空间需要建立访问控制、数据管理、数据加密、容灾备份机制。

(1)对象存储的概念

对象是OSS存储数据的基本单元,也称为OSS的文件。对象由元信息(ObjectMeta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键-值对,表示了对象的一些属性,如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。其中地域表示OSS的数据中心所在物理位置,一般来说,距离用户更近的地域访问速度更快。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。每个用户可以拥有多个存储空间。存储空间的名称在OSS范围内必须是全局唯一的,一旦创建就无法修改名称。存储空间内部的对象数目没有限制。

(2)对象存储的实现机制

OSS,依赖于文件系统提供了从“对象”到“块”的映射,采用key-value的扁平化存储架构设计,调用API就能进行数据存储和读取。对象存储最常用的方案就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外配置几台服务器作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。

数据冗余存储机制,OSS将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上。OSS周期性地通过校验等方式验证数据的完整性,及时发现因硬件失效等原因造成的数据损坏。当检测到数据有部分损坏或丢失时,会利用冗余的数据进行重建并修复损坏数据,确保硬件失效时的数据可靠性和可用性。

(3)OSS与传统存储的区别

与传统存储相比,OSS使用方便,价格低,扩展方便,可以存储海量数据。网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件。块存储的客户端通过数据块的地址访问SAN上的数据块。对象存储则通过REST网络服务访问对象。对象存储提升了存储系统的扩展性。当一个存储系统中保存的数据越来越多时,存储系统也需要同步扩展,然而由于存储架构的硬性限制,传统网络存储系统的管理开销会呈指数上升。而对象存储架构的扩展只需要添加新的存储节点就可以。它解决了存储海量大数据的问题。

(4)对象存储的开源实现

对象存储的实现方案包括Swift、Ceph、Minio、HBase MOB、Hadoop Ozone等。


http://chatgpt.dhexx.cn/article/IS8RHPVg.shtml

相关文章

事务四大特征:原子性,一致性,隔离性和持久性。

事务四大特征:原子性,一致性,隔离性和持久性。 1、原子性(Atomicity) 一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败&…

MySQL事务原子性、一致性和持久性以及回滚是如何实现的?

前言 《MySQL事务详解》一文中详细讲解了事务的概念,包括ACID特性,事务并发引起的问题,事务的四种隔离级别。 在事务的四种特性中,原子性、一致性、持久性通过数据库的redo log和undo log来完成,redo log称为重做日志&…

InnoDB引擎--事务持久性

事务是指构成单一逻辑工作单元的操作的集合。数据库系统维护事务的ACID四个特性: 原子性:事务的所有操作在数据库中要么全部反映,要么全部不反映。一致性:事务执行前后数据库保持约束一致性和业务逻辑一致性。隔离性:在事务并发执行时,各个事务都感觉不到其他事务的存在。…

MySQL 是如何保证一致性、原子性和持久性的!

编辑:业余草 来源:https://www.xttblog.com/?p4891 今天,我们来简单的看一下 MySQL 的一致性、原子性和持久性问题。后面还扩展了 15 个简单的面试题,希望大家喜欢! 1、Mysql怎么保证一致性的? OK&#xf…

MySQL InnoDB 存储引擎写入磁盘(落盘)的原理\MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)\隔离性

文章目录 一、MySQL InnoDB 存储引擎写入磁盘(落盘)的原理一条 update 语句在写入磁盘的过程为什么必须有“两阶段提交”呢? binlog 的写入机制 二、MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)redo log(重做日志) 如…

MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)

日志的重要性 日志绝对是数据库的核心. 持久化的日志记录了各种重要的信息.数据的恢复需要依赖日志。 慢查询sql语句需要用到慢查询日志。以及错误日志中保存着mysqld数据库服务端在启动过程中发生的重大错误信息... 数据库重要组成 本质上来说是一个文件系统 (两大重要组…

MySQL究竟是如何做到持久性的?

前言 我们学习事务中,对于持久性(durability)是这样定义的:事务一旦提交,则其所有的修改将会保存到数据库当做。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数auto…

理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)

事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有ACID特性,具体如下: 1. 原子性(Atomic) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都…

持久性连接和非持久性连接

HTTP连接有两种,一种为持久性连接;另一种为非持久性连接。 由于不同的HTTP版本,使用不同的方式。 在这里分析一下二者的区别: 一、非持久性连接(Nonpersistent HTTP) 特点:每个TCP连接最多允许传输一个对象 HTTP 1.0使用的非持久性连接 过程: 响应时间分析与建…

mysql事务如何保证持久性_详解MySQL事务持久性实现

所谓MySQL事务持久性就是事务一旦提交,就是永久性的,不会因为宕机等故障导致数据丢失(外力影响不保证,比如磁盘损害)。持久性是保证了MySQL数据库的高可靠性(High Reliability),而不是高可用性(Hign Availability)。 MySQL的innoDB存储引擎,使用Redo log保证了事务的持久性…

Mysql持久性的实现

1、持久性的定义 事务一旦提交,则其所有的修改将会保存到数据库当中。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit1(如果想要关掉,要set autocommit0,然后要手动的开启关闭&a…

数据库事务-持久性原理

持久性(Durability): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。(持久性由redo log日志来保证) 以一个跟新语句执行流为例: 在存储引擎执行时,会先在缓存池…

MYSQL 1251

今天折腾mysql,,一直在连接的时候出现1251的报错,然后百度了很多方法,都没有办法成功,,最后折腾了好久,,终于成功了,进入MySQL 8.0 Command Line Clien,依次输…

java_1125

1。从键盘输入一个字符串 编写一个程序,判断输出一个字符串中大写英文字母数,和小写英文字母数,和其他非英文字母数 2. 编写一个方法,返回一个double类型的二维数组,数组中的元素通过解析字符串参数获得&#xff0c…

java_1115

定义一个接口 MediaPlayer,表示家庭影院的一个设备。MediaPlayer 中 包含 play(),stop(), open()三个方法,分别表示播放、停止和开仓功能。 MediaPlayer 有三个实现类,分别为: DVDPlayer,表示 …

java--Integer的128陷阱

包装类 提到128陷阱就不得先说一下包装类 1.为什么有包装类 在面向对象中,“一切皆对象”,但基本数据类型的数据不太符合这一理念,基本数据类型不是对象.涉及到类型之间的转化,数据类型之间的基本操作;如果都有我们…

P1152 java

package suanfa_xiaoqiang1; import java.util.Arrays; import java.util.Scanner; public class P1152 { public static void main(String[] args) { Scanner sc new Scanner(System.in); int nsc.nextInt(); int[] anew int[n1]; //数组遍历从1开始的时候,要加…

Java(11)

学习来源:日撸 Java 三百行(21-30天,树与二叉树) 第 28 天: Huffman 编码 (节点定义与文件读取) 输入:输入表示文本文件的字符串paraFilename 输出:构造对象tempHuffman并输出文本文件的内容inputText 优…

Java-1110

https://github.com/Lannister-never-pay/JavaWebLearning/tree/main/java1108 因为懒&#xff0c;还是用的1108的module JSP 指令 作用&#xff1a;用于配置JSP页面&#xff0c;导入资源文件 格式&#xff1a;<% 指令名称 属性名1属性值1 属性名2属性值2 %> 多个键值…

Java——详解Integer128陷阱

今天我们来一起探讨一下Java的128陷阱 首先我们通过代码对128陷阱进行一个认知 public static void main(String[] args){Integer a 127 ;Integer b 127 ;Integer c 128 ;Integer d 128 ;Integer e 1000 ;Integer f 1000 ;int a1 127;int b1 127;int c1 128;int d1 …