食品储存管理制度与管理的区别

在数据库的逻辑结构中,表空间将不同类型的数据分别组织在一起,如系统数据、用户数据、临时数据、回滚数据等。在同一个表空间中,数据以数据库对象为单位组织在一起,一般情况下一个数据库对象对应一个段,一个表空间中包含多个段。在段中存储数据库对象中的数据,数据所占用的存储空间以区为单位进行分配和回收。
一个数据库对象占用若干个区,所以段是由若干个区组成的。当为数据库对象分配存储空间时,一次分配一个或多个区。区是分配和回收存储空间的基本单位,一个区是由若干个连续的数据块组成的。数据块是逻辑结构中的最小存储单位,是Oracle读写数据的基本单位。
当用户访问数据时,服务器进程首先将数据从数据块读到数据库高速缓存中,并存储在与数据块大小相同的缓冲区中,然后在缓冲区中对数据进行读写。数据库中的数据在物理上是存储在磁盘上的,需要占用一定的操作系统块。
一个数据块是由若干个操作系统块组成的,因此,数据块的大小是操作系统块的整数倍。数据库服务器对数据块的读写最终将转化为对多个操作系统块的读写。
在表空间中,一个段一般代表一个数据库对象,对象的所有数据都存储在对应的段中。
一般情况下段不需要用户自己创建,在创建数据库对象将自动产生段。为段所分配的空间就位于表空间的数据文件中,这些存储空间由若干个区组成。段、区和数据块之间的关系如图所示。
Oracle 11g支持10余种类型的段。
通过查询数据字典dba_segments ,可以得到当前数据库中已经存在的段类型。
下面是有关数据字典dba_segments的相关信息:
DBA_SEGMENTS&describes the storage allocated for all segments in the database.
USER_SEGMENTS&describes the storage allocated for the segments owned by the current user's objects. This view does not display the&OWNER,&HEADER_FILE,&HEADER_BLOCK, or&RELATIVE_FNO&columns.
ColumnDatatypeNULLDescription
SELECT DISTINCT segment_type FROM dba_
1.表段(TABLE)
表段是用来存储表中的数据的,这是最常见的一种段。
在创建表时将自动创建一个同名的段,表中的数据就存储在数据段中。
2.索引段(INDEX)
索引是依赖于表的数据库对象,它的功能是加快表的查询速度。
当用户执行CREATEINDEX命令创建索引时,在数据库中将产生一个索引段。当用户在表上定义主键约束和唯一性约束时也将自动产生索引段。索引段的名称与索引相同,索引中的数据就存储在索引段中。
当用户执行排序等操作时,将产生大量的临时数据。
临时数据将首先存储在PGA的排序区中,如果排序区的大小不足以存放这些临时数据时,将使用临时段。一般情况下,用户在执行以下操作时可能用到临时段:
SELECT &&& FROM &&& ORDER BY &&&SELECT &&& FROM &&& GROUP BY &&&SELECT DISTINCT &&& FROM &&&SELECT &&& UNIONCREATE INDEX &&&ANALYZE
临时段一般位于专门的临时表空间中。
如果没有专门的临时表空间,数据库服务器将把SYSTEM表空间作为用户的临时表空间。临时段不是一种永久性的段,而是随着用户的排序操作的进行而动态产生和消失的。当排序操作开始时,在临时表空间中将产生一个临时段,在排序结束时临时段将被删除。如果在SYSTEM表空间中存储这些临时数据,将导致大量的存储碎片的产生,从而大大降低数据库服务器的性能。因此, Oracle建议创建专门的临时表空间。
4.回滚段(ROLLBACK)
回滚段是用来存储回滚数据的。
如果使用自动方式管理回滚数据,需要在数据库中创建一个UNDO表空间,随着用户事务的执行,在UNDO表空间中将自动产生回滚段。
5.分区表段(TABLE PARTITION)
在数据库中可以将一个大表分成几个分区( PARTITION ),每个分区对应一个段。
这些分区表段可以存储在同一个表空间中,也可以存储在不同的表空间中。
分区表主要应用于数据仓库,它的主要作用是缩小数据库查询的范围,加快查询的速度。例如,某公司的客户表中存储了上万条客户信息,假设将这个表分成13个区,将客户信息按照其姓名的首字母不同而分别存储在不同的分区中。姓名以&A&和&B &开始的客户存储在第一个分区中,以&C&和&D&开始的存储在第二个区中,依此类推。这样一个表中的数据就被分开存储在13 个分区中,如果要查询一个客户的信息,只需要在它所在的分区中查询即可,查询的范围将大约缩小为原来的1/13 。
6.分区索引段(INDEX PARTITION)
与表的分区类似,索引也可以分区。
将一个索引划分为几个分区,每个分区对应一个段,索引的数据将分别存储在这些段中。对索引进行分区的目的是为了加快查询索引的速度。
需要注意的是,只有对表进行分区后,才能在表上创建分区索引。
如果在表中定义了CLOB 或BLOB 类型的列,在表中就可以存储大文本或二进制数据,如文档、图像、声音等。LOB数据并不是直接存储在表段中,而是单独存放在一个LOB 段中,在表中仅仅存放LOB 段的指针。
8.LOB索引段
如果在表上定义了LOB 类型的列,在数据库中将自动创建LOB 段,同时自动创建LOB索引段。LOB索引段的作用是加快LOB 列的查询速度。
9.簇段(CLUSTER)
簇是一种数据库对象,它的作用是将逻辑上相关的数据组织在一起,簇中的数据来自一个或多个表。每个簇对应一个簇段,在创建簇时将自动创建簇段,并且簇段的名称与簇完全相同。使用簇可以加快多表查询的速度。
10.索引组织表(INDEX ORGANIZED TABLE)段
如果经常要根据一个表的主键查询数据,可以将主键列上的索引与表放在一个段中,这种表称为索引组织表,它被存储在一个表段中,这种表段就是索引组织表段。索引组织表段的主要作用是加快基于主键的查询速度。假设在数据库中创建一个表,在表上创建一个索引,在表中包含一个LOB列,那么创建表的结果是产生了四个段:表段、索引段、LOB段和LOB索引段。图表示这四个段之间的关系。
段空间的管理
一般来说,段不需要用户专门创建,当用户创建一个数据库对象时,在数据库中将自动产生对应的段。临时段和回滚段比较特殊,临时段位于临时表空间中,它是随着用户的排序等操作的进行而动态创建和消失的。回滚段位于UNDO表空间中,并且随着用户事务的执行而动态产生和消失。在本地管理表空间中,区的分配策略有自动方式和手工方式两种。
如果采用自动方式(AUTOALLOCATE ),数据库服务器将决定区的大小,并自动进行区的分配和回收,区的大小是可变的,默认的区大小为64KB 。如果采用手工方式,则需要通过UNIFORM 指定区的大小,默认为1MB 。在创建本地管理表空间时,还可以使用SEGMENT SPACE MANAGEMENT子句指定段空间的管理方式。如果采用手工方式,则表空间将为每个段维护一个空闲列表( Free List ),它位于数据文件的头部,在空闲列表中记录当前数据文件中所有的空闲块,段利用空闲列表管理块的分配和回收。如果选择自动方式,段将采用位图的方式管理块的分配和回收。
为了对段中数据块的使用进行控制,在段中设置了一个HWM (High Water Mark )。HWM可以认为是一个指针,在段刚被创建时, HWM位于段的开始位置。
在HWM之上是没有被格式化,尚不能写入数据的数据块,而在HWM之下的数据块有以下几种情况:&已经包含数据。&以前曾经包含数据,但后来数据被删除。&已经被格式化,且状态为空闲的。&尚未被格式化。
为了给用户数据分配数据块,在段中还设置了一个低HWM ,位于低HWM之下的数据块要么是已经包含数据的,要么是曾经包含数据,但后来数据被删除的。对一个用户事务而言,可用的数据块就是那些位于低HWM 和HWM之间的数据块。当用户向段中写入数据时,服务器进程将在低HWM 和HWM之间查找那些已经被格式化的数据块,将数据写入这些数据块。如果没有足够的数据块可用,服务器进程将在这个范围内查找那些尚未被格式化的数据块,对其进行格式化,然后将数据写入。如果这样的数据块还不能满足要求,服务器进程将把HWM 向上移动,为这次事务分配其他尚未格式化的数据块,然后对其进行格式化,并将数据写入。
在将数据写入数据块之后,服务器进程将把低HWM 向上移动,使其指向第一个可用的数据块。数据块的分配情况如图所示。
区是Oracle 为数据库对象分配存储空间的基本单位。
当用户创建表、索引、簇等数据库对象时,数据库服务器将为该对象对应的段分配若干个区,以存储该对象的数据。当段的空间被消耗完时,可以进行扩展,数据库服务器将为该段分配新的区。当一个数据库对象被删除时,它所占用的区将被释放,数据库服务器负责回收这些区,并在适当的时机将这些空闲区分配给其他数据库对象。
在本地管理表空间中,区的大小要么由数据库服务器自动指定,要么由数据库管理员指定。当在表空间中创建表、索引等数据库对象时,数据库服务器将按照指定的大小为段分配相应数量的区,在默认情况只分配一个初始区,尽管在这个区中还没有包含数据,但这个区不能分配给其他数据库对象。当初始区被写满后,数据库服务器将根据需要为段分配其他的区。在表空间的每个数据文件的头部,都有一个位图,用来控制块的分配。
当为段分配一个区时,数据库服务器将在位图中查找可用的数据块,将它们分配这个区。首先我们执行下面的语句来创建本地管理表空间ts4:
CREATE TABLESPACE TS4 DATAFILE 'C:\Users\john\Desktop\tbs\ts4_1.dbf' SIZE 1M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
由于采用了自动分配方式( AUTOALLOCATE ),因此在表空间ts4 中所有区的大小默认都是64KB 。接下来我们在表空间ts4 中创建表tab3:
CREATE TABLE tab3 (col INT) TABLESPACE ts4;
这样将为段TAB3分配一个区,大小为64KB ,占用8个数据块(每个数据块大小为8KB )。执行下面的查询语句,将得到为段TAB3 分配得区的信息:
SELECT bytes, blocks, extents FROM dba_segments WHERE segment_name='TAB3';
一个段所占用的区的详细信息可以通过查询数据字典DBA_EXTENTS获得。
下面是有关数据字典DBA_EXTENTS的信息。
DBA_EXTENTS&describes the extents comprising(构成) the segments in all tablespaces in the database.
Note that if a data file (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information. If an object has extents in an online file of the tablespace, you will see extent information about the offline data file. However, if the object is entirely in the offline file, a query of this view will not return any records.
USER_EXTENTS&describes the extents comprising the segments owned by the current user's objects. This view does not display the&OWNER,FILE_ID,&BLOCK_ID, or&RELATIVE_FNO&columns.
ColumnDatatypeNULLDescription
例如,下面的SELECT语句用于查询段TAB3所占用的区的ID 、大小、区中所包含数据块的数目以及第一个数据块的ID:
SELECT extent_id, bytes/1024 ||'K' KBytes, blocks, block_id FROM dba_extents WHERE segment_name='TAB3';
在一般情况下,从段中删除数据时,数据所占用的空间并没有被释放,除非这个数据库对象被删除。在以下几种情况中,会发生区的回收:&一个对象被删除。.对表进行整理。&对索引进行重建或合并。&在表上执行TRUNCATE命令。&手工执行命令释放段中HWM以下未使用的空间。在这里需要注意的是, TRUNCATE命令的执行结果是将表中的数据删除,从表面上来看类似于DELETE ,但是这两条命令有很大的区别。在执行TRUNCATE命令时,表段中的HWM被移动到段的开始位置,这就意味着下次写数据是从段的开始位置进行的,以前的数据所占用的空间被释放。而在执行DELETE命令时, HWM并没有移动,这就意味着数据虽然被删除了,但是数据所占用的空间并没有被释放。
数据块的管理
数据块是Oracle 中最小的存储单位,也是数据库服务器读写数据的基本单位。
用户在访问数据库时,服务器进程首先将数据从数据块中读到SGA的数据库高速缓存中,并放在与数据块大小相同的缓冲区中,然后在缓冲区中对数据进行读写。如果数据发生了变化, DBWR后台进程负责将脏缓冲区中的数据重新写人数据块。在Oracle 11g 的数据库中可以定义标准块,也可以定义非标准块。
标准块的大小由初始化参数DB_BLOCK_SIZE指定。非标准块的大小可以是2KB 、4KB 、16KB 、32KB等,只要不与标准块的大小相同即可。无论是哪种块,在SGA 中都需要为其定义数据库高速缓存,缓存是由许多缓冲区组成,缓冲区大小与数据块相同。当用户访问数据块中的数据时,服务器进程将把数据从数据块读到相应的缓冲区中。为了提高数据库的性能, Oracle规定数据块的大小必须是操作系统块的整数倍。
例如,在Windows系统中,操作系统块的大小是4KB ,所以数据块的大小可以是4KB 、8KB 、16KB 等。在UNIX 中,操作系统块的大小是512 字节或1KB ,所以数据块的大小可以是1KB 、2KB 、4KB 等。
数据块的组成
在数据块中可以存储不同类型的数据,如用户数据、系统数据、表、索引等。
无论是什么类型的数据,最终都是存储在数据块中的,这些数据块具有相同的结构。一个数据块由以下几部分组成:&块头:用来记录块本身的信息,如块地址、段类型等。&表目录:如果在数据块中存储表中的数据,则需要把表的相关信息记录在表目录中。&行目录:如果在数据块中存储表中的数据,还需要把这些行的信息记录在行目录中。
&空闲空间:是指数据块中尚未使用的存储空间。
当向表中插入数据时,将使空闲空间减少。当删除表中的数据时,将使空闲空间增加。
而当执行UPDATE操作时,可能使空闲空间增加,也可能使其减少。&已使用空间:是指数据块中己写入数据的空间。
数据库对象的数据就存储在数据块的已使用空间中。在数据块中,块头、表目录和行目录中的信息只能由数据库服务器来维护,用户的操作只能直接影响空闲空间和已使用空间。
数据块的空间管理
数据块的空间管理主要涉及空闲空间的管理。
当数据库服务器为数据库对象分配存储空间时,以区为单位分配几个连续的数据块,数据库对象的数据就存储在这些数据块中。当区中的一个数据块被写完时,数据将继续写入下一个数据块。当区中所有数据块都被写完时,数据将被写入下一个区。这里以表为例来说明数据块空间的管理。
当用户在表上执行INSERT操作时,新数据被写入数据块的空闲空间。当用户执行DELETE操作时,数据块中相应的数据将被删除。
为了提高数据库的性能,在每个数据块中都需要保留一定的空间,这段空间是为执行UPDATE操作而保留的。当用户执行UPDATE操作时,修改后的数据可能占用比原来更多的存储空间。
例如,假设员工SMITH原来的奖金( COMM )为NULL ,因为NULL是不占用存储空间的,所以当执行语句& UPDATE emp SET comm=5000 WHERE ename =& SMITH&时,该行数据将需要更多的存储空间。如果在当前块中没有预留空间,那么这行数据将被分开存储在两个块中,于是产生了块间的迁移。块间的迁移将降低数据库的性能,因为如果用户要访问这一行数据时,将不得不从两个数据块中读取数据,这样就增加了磁盘I/O 。如果在数据块中设置了保留空间,那么可能会出现这种情况:当用户执行UPDATE语句修改一行数据时,这行数据可能会占用比以前更多的空间,这时就可以使用保留空间,这样就减少了数据块之间的迁移。当然保留空间也可能无法满足UPDATE操作的需要,于是一行数据还是要被分开存储在两个数据块中,在这种情况下也将产生数据块间的迁移,只不过产生迁移现象的现象将大大减少。
如果表空间的区管理方式为本地管理,并且在创建表空间时使用SEGMENT SPACEMANAGEMENT子句指定段空间管理方式为AUTO ,那么表空间将为每个段维护一个位图,并以位图的方式管理段中的数据块,这种管理是自动进行的,不需要人为干预。在其他情况下,表空间为每个段指定一个空闲列表,并以空闲列表的方式管理段中的数据块。在后一种情况下用户可以通过PCTFREE和PCT USED两个参数控制数据块空间的使用。PCTFREE和PCTUSED两个参数是用在数据库对象上的。
在创建表、索引等数据库对象时,可以指定这两个参数,也可以在创建数据库对象之后修改这两个参数。
1.PCTFREE参数
PCTFREE参数用于设置数据块中必须保留的最少空间,参数值是-个百分比,保留的空间是为UPDATE操作使用的。
当用户执行UPDATE操作时,修改后的数据可能需要比原来更多的存储空间(当然也可能比原来更少),如果没有保留空间,修改后的数据将不得不因为空间不足而另外使用一个数据块,这样一行数据将存存储在两个数据块中,这种现象称为数据块间的迁移。当用户下次再访问这行数据时,将不得不从两个数据块中取出所需的数据,这样就增加了磁盘的I/O,从而降低了数据库的性能。假设PCTFREE参数的值设置为20 ,那么在数据块中将有20%的保留空间,其余的80% 的空间可用来存储数据。随着数据库服务器的运行,当80% 的空间被消耗完时,新的数据将无法再写入这个块,于是需要使用一个新的数据块来存储数据。20%的保留空间是用于UPDATE操作的,如果用户一直没有执行UPDATE操作,或者经过UPDATE操作后数据需要的存储空间比原来反而更少,这部分空间将一直保持空闲。PCTFREE参数的用法如图所示。
PCTFREE参数的值可以设置在0 ~ 99之间。
如果参数的值较大,那么发生数据块间迁移的机会将减少,数据库的性能比较高,但是数据块空间的浪费比较严重。如果将参数值设置得较小,数据块存储空间的利用率较高,但是发生数据块间迁移的机会将增加,数据库的性能将受到较大影响。
2.PCTUSED参数
PCTUSED参数用于设置可再次向数据块中写人数据时,已使用空间的百分比。
如果将PCTFREE参数的值设置为20 ,那么最多可以使用数据块80%的存储空间。当可用空间被消艳完时,用户将无法继续向这个块中插入数据。当用户执行DELETE操作删除数据时,将使已使用空间减少,空闲空间增加。执行UPDATE操作也可能使已使用空间减少。
随着已使用空间的不断减少,用户可再次写入数据,但是必须满足一定的条件,即已使用空间必须减少到PCTUSED参数指定的百分比。如果将PCTUSED参数值设置为60 ,那么当数据块中已使用空间减少到60%时,用户才可以再次向这个数据块中插入数据。PCTUSED参数的用法如图所示。
一般情况下PCTFREE和PCTUSED两个参数配合使用,共同控制数据块存储空间的使用。下图显示了PCTFREE和PCTUSED两个参数分别设置为20和60时的情况。
如果一个段位于本地管理表空间中,并且段空间管理方式为MANUAL ,或者位于字典管理表空间中,表空间将为每个段维护一个空闲列表。在空闲列表中记录所有完全空闲的数据块,或者已经使用的,但是可以继续写入数据的数据块。如果一个数据块中的空闲空间一直减少,当达到PCTFREE参数指定的数值时,这个数据块将被从空闲列表中删除。在这两种类型的表空间中,我们可以通过PCTFREE和PCTUSED参数控制数据块存储空间的使用。例如,以下语句用于创建表tab5,并为段tab5指定PCTFREE和PCTUSED参数:
CREATE TABLE tab5(col int) PCTFREE 20 PCTUSED 60;
阅读(...) 评论()块存储、文件存储、对象存储、分布式存储的区别_运维部落_传送门
块存储、文件存储、对象存储、分布式存储的区别
原文链接:/p/27e1bd4e516e,转载请注明出处,如有问题还请联系我们!块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。首先,我们介绍这两种传统的存储类型。通常来讲,所有磁盘阵列都是基于Block块的模式,而所有的NAS产品都是文件级存储。一、文件级和块级的区别首先我们先来了解一下,什么叫做块级?什么叫文件级?1.块级概念:块级是指以扇区为基础,一个或我连续的扇区组成一个块,也叫物理块。它是在文件系统与块设备(例如:磁盘驱动器)之间。2.文件级概念:文件级是指文件系统,单个文件可能由于一个或多个逻辑块组成,且逻辑块之间是不连续分布。逻辑块大于或等于物理块整数倍,3.物理块与文件系统之间的关系映射关系:扇区→物理块→逻辑块→文件系统二、备份1、文件级备份:文件级备份是指在指定某些文件进行备份时,首先会查找每个文件逻辑块,其次物理块,由于逻辑块是分散在物理块上,而物理块也是分散在不同扇区上。需要一层一 层往下查找,最后才完成整个文件复制。文件级备份时比较费时间,效率不高,实时性不强,备份时间长,且增量备份时,单文件某一小部份修改,不会只备份修改 部份,而整个文件都备份。目前文件级备份工具:Symantec NBU/BE 备份软件、Commvault、CA、Networker备份时间点保留周期:传统备份软件(文件级备份),可以保留备份时间点多,恢复颗粒度大2、块级备份:块级备份是指物理块复制,效率高,实时性强,备份时间短,且增量备份时,只备份修改过的物理块。目前块级备份工具:飞康CDP、Recoverpoint、杭州信核CDP、Novell CDP备份时间点保留周期:CDP备份(块级备份),可以保留备份时间点少,恢复颗粒度小三、常见级别存储块存储典型设备:磁盘阵列,硬盘,虚拟硬盘文件存储典型设备:FTP、NFS服务器,SamBa对象存储典型设备:内置大容量硬盘的分布式服务器分布式存储的应用场景相对于其存储接口,现在流行分为三种:四、常见存储方法对象存储也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、又拍、Swift、S3块存储这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)文件存储通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。五、存储举例1、块存储DAS(Direct AttachSTorage):是直接连接于主机服务器的一种储存方式,每一台主机服务器有独立的储存设备,每台主机服务器的储存设备无法互通,需要跨主机存取资料时,必须经过相对复杂的设定,若主机服务器分属不同的操作系统,要存取彼此的资料,更是复杂,有些系统甚至不能存取。通常用在单一网络环境下且数据交换量不大,性能要求不高的环境下,可以说是一种应用较为早的技术实现。SAN(Storage Area Network):是一种用高速(光纤)网络联接专业主机服务器的一种储存方式,此系统会位于主机群的后端,它使用高速I/O 联结方式, 如 SCSI, ESCON及 Fibre- Channels。一般而言,SAN应用在对网络速度要求高、对数据的可靠性和安全性要求高、对数据共享的性能要求高的应用环境中,特点是代价高,性能好。例如电信、银行的大数据量关键应用。它采用SCSI 块I/O的命令集,通过在磁盘或FC(Fiber Channel)级的数据访问提供高性能的随机I/O和数据吞吐率,它具有高带宽、低延迟的优势,在高性能计算中占有一席之地,但是由于SAN系统的价格较高,且可扩展性较差,已不能满足成千上万个CPU规模的系统。2、文件存储通常,NAS产品都是文件级存储。NAS(Network Attached Storage):是一套网络储存设备,通常是直接连在网络上并提供资料存取服务,一套 NAS 储存设备就如同一个提供数据文件服务的系统,特点是性价比高。例如教育、政府、企业等数据存储应用。它采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的NFS文件系统,但由于NAS的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。下面,我们对DAS、NAS、SAN三种技术进行比较和分析:针对Linux集群对存储系统高性能和数据共享的需求,国际上已开始研究全新的存储架构和新型文件系统,希望能有效结合SAN和NAS系统的优点,支持直接访问磁盘以提高性能,通过共享的文件和元数据以简化管理,目前对象存储系统已成为Linux集群系统高性能存储系统的研究热点,如Panasas公司的Object Base Storage Cluster System系统和Cluster File Systems公司的Lustre等。下面将详细介绍对象存储系统。3、对象存储总体上来讲,对象存储同兼具SAN高速直接访问磁盘特点及NAS的分布式共享特点。核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统,每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。对象存储结构组成部分(对象、对象存储设备、元数据服务器、对象存储系统的客户端):3.1、对象对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性信息(Meta Data)的组合,这些属性信息可以定义基于文件的RAID参数、数据分布和服务质量等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性,对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识OSD命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。3.2、对象存储设备对象存储设备具有一定的智能,它有自己的CPU、内存、网络和磁盘系统,OSD同块设备的不同不在于存储介质,而在于两者提供的访问接口。OSD的主要功能包括数据存储和安全访问。目前国际上通常采用刀片式结构实现对象存储设备。OSD提供三个主要功能:数据存储。OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写。智能分布。OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。每个对象元数据的管理。OSD管理存储在其上对象的元数据,该元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。3.3、元数据服务器(Metadata Server,MDS)MDS控制Client与OSD对象的交互,主要提供以下几个功能:(1) 对象存储访问。MDS构造、管理描述每个文件分布的视图,允许Client直接访问对象。MDS为Client提供访问该文件所含对象的能力,OSD在接收到每个请求时将先验证该能力,然后才可以访问。(2) 文件和目录访问管理。MDS在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。(3) Client Cache一致性。为了提高Client性能,在对象存储系统设计时通常支持Client方的Cache。由于引入Client方的Cache,带来了Cache一致性问题,MDS支持基于Client的文件Cache,当Cache的文件发生改变时,将通知Client刷新Cache,从而防止Cache不一致引发的问题。3.4、对象存储系统的客户端Client为了有效支持Client支持访问OSD上的对象,需要在计算节点实现对象存储系统的Client,通常提供POSIX文件系统接口,允许应用程序像执行标准的文件系统操作一样。4、GlusterFS 和对象存储GlusterFS是目前做得最好的分布式存储系统系统之一,而且已经开始商业化运行。但是,目前GlusterFS3.2.5版本还不支持对象存储。如果要实现海量存储,那么GlusterFS需要用对象存储。值得高兴的是,GlusterFS最近宣布要支持对象存储。它使用openstack的对象存储系统swift的上层PUT、GET等接口,支持对象存储。http://www.openstack.org/blog/2011/07/announcing-the-gluster-connector-for-openstack/——详细介绍六、各存储优缺点1、块存储典型设备:磁盘阵列,硬盘块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘、做Raid、或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘。(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了。例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘。)接着块存储会采用映射的方式将这几个逻辑盘映射给主机,主机上面的操作系统会识别到有5块硬盘,但是操作系统是区分不出到底是逻辑还是物理的,它一概就认为只是5块裸的物理硬盘而已,跟直接拿一块物理硬盘挂载到操作系统没有区别的,至少操作系统感知上没有区别。此种方式下,操作系统还需要对挂载的裸硬盘进行分区、格式化后,才能使用,与平常主机内置硬盘的方式完全无异。优点:1、 这种方式的好处当然是因为通过了Raid与LVM等手段,对数据提供了保护。2、 另外也可以将多块廉价的硬盘组合起来,成为一个大容量的逻辑盘对外提供服务,提高了容量。3、 写入数据的时候,由于是多块磁盘组合出来的逻辑盘,所以几块磁盘可以并行写入的,提升了读写效率。4、 很多时候块存储采用SAN架构组网,传输速率以及封装协议的原因,使得传输速度与读写速率得到提升。缺点:1、采用SAN架构组网时,需要额外为主机购买光纤通道卡,还要买光纤交换机,造价成本高。2、主机之间的数据无法共享,在服务器不做集群的情况下,块存储裸盘映射给主机,再格式化使用后,对于主机来说相当于本地盘,那么主机A的本地盘根本不能给主机B去使用,无法共享数据。3、不利于不同操作系统主机间的数据共享:另外一个原因是因为操作系统使用不同的文件系统,格式化完之后,不同文件系统间的数据是共享不了的。例如一台装了WIN7/XP,文件系统是FAT32/NTFS,而Linux是EXT4,EXT4是无法识别NTFS的文件系统的。就像一只NTFS格式的U盘,插进Linux的笔记本,根本无法识别出来。所以不利于文件共享。2、文件存储典型设备:FTP、NFS服务器为了克服上述文件无法共享的问题,所以有了文件存储。文件存储也有软硬一体化的设备,但是其实普通拿一台服务器/笔记本,只要装上合适的操作系统与软件,就可以架设FTP与NFS服务了,架上该类服务之后的服务器,就是文件存储的一种了。主机A可以直接对文件存储进行文件的上传下载,与块存储不同,主机A是不需要再对文件存储进行格式化的,因为文件管理功能已经由文件存储自己搞定了。优点:1、造价交低:随便一台机器就可以了,另外普通以太网就可以,根本不需要专用的SAN网络,所以造价低。2、方便文件共享:例如主机A(WIN7,NTFS文件系统),主机B(Linux,EXT4文件系统),想互拷一部电影,本来不行。加了个主机C(NFS服务器),然后可以先A拷到C,再C拷到B就OK了。(例子比较肤浅,请见谅……)缺点:读写速率低,传输速率慢:以太网,上传下载速度较慢,另外所有读写都要1台服务器里面的硬盘来承担,相比起磁盘阵列动不动就几十上百块硬盘同时读写,速率慢了许多。3、对象存储典型设备:内置大容量硬盘的分布式服务器对象存储最常用的方案,就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外搞几台服务作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。之所以出现了对象存储这种东西,是为了克服块存储与文件存储各自的缺点,发扬它俩各自的优点。简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储。首先,一个文件包含了了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。以往像FAT32这种文件系统,是直接将一份文件的数据与metadata一起存储的,存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,假设文件系统要求一个块4K,那么就将文件打散成为1000个小块),再写进硬盘里面,过程中没有区分数据/metadata的。而每个块最后会告知你下一个要读取的块的地址,然后一直这样顺序地按图索骥,最后完成整份文件的所有块的读取。这种情况下读写速率很慢,因为就算你有100个机械手臂在读写,但是由于你只有读取到第一个块,才能知道下一个块在哪里,其实相当于只能有1个机械手臂在实际工作。而对象存储则将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD,假设反馈文件A存储在B、C、D三台OSD,那么用户就会再次直接访问3台OSD服务器去读取数据。这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。另一方面,对象存储软件是有专门的文件系统的,所以OSD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。所以对象存储的出现,很好地结合了块存储与文件存储的优点。最后为什么对象存储兼具块存储与文件存储的好处,还要使用块存储或文件存储呢?有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据库需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化的,所以是不能够采用其他已经被格式化为某种文件系统的存储的。此类应用更适合使用块存储。对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。号外号外:现在我们公众号推出参与奖和互动奖,凡是通过微信与我们参与讨论互动最多的朋友,将获得我们送出的神秘礼物,还有机会获得Ansible中文官网马上将出版的新书哦! 我们将不定期的推出奖励计划 ! 奖励多多,小伙伴们,一起来吧!以上是今天为大家带来的内容,如果有任何问题,大家也可以添加以下QQ群参与问题的讨论。Ansible中文权威群:(已满)AWK&SED;企业实战: docker企业架构实践:Jumpserver交流群 :Ansible中文权威-2号群:关于我们:
觉得不错,分享给更多人看到
运维部落 微信二维码
分享这篇文章
9月5日 0:33
运维部落 最新文章
运维部落 热门文章

我要回帖

更多关于 中药材的储存与管理 的文章

 

随机推荐