逻辑存储单元

dbspace
dbspace是一个或者多个chunk的逻辑集合存储单元,dbspace将数据库的逻辑存储单位table与数据存
储单位chunk连接在一起。GBase 8t的内部设计支持一个实例最多可以有2047个dbspace,一个dbspace
可以有1-32767个chunk。
bspace对整个GBase8t实例可见,实例中的多个数据库都可以使用所有的dbspace,可以指定database
的默认dbspace,创建表、索引时也可以指定所在的dbspace,对于分片表,索引可以同时使用多个db-
space。

按照dbspace的作用分类,在一个实际生产中数据库系统中我们有如下分类space:7

rootdbs:主要用来存储保留页及Gbase8t数据库的系统信息(sysmaster、sysadmin等)
plogdbs:用来存储物理日志文件
llogdbs:用来存储逻辑日志文件
tempdbs0用来存储临时表;用来提供排序和join所需的临时空间
tempdbs1:

datadbs01:用来存储用户自定义的表、索引数据,一般需要定义10~100个
 .
 .
datadbs10
blobspace:
	用来存储简单大对象的专门dbspace。blobspace中的基本存储单元是blobpage。
	blobpage的大小可被配置为数据库服务器的数据页大小的整数倍。对于blobspace里的数据,
	数据库服务器子在将它们写会磁盘时不使用缓存区(buffer)
sbspace:
	用来存储智能大对象的专门dbspace。sbpage的小小与数据库服务器的数据页带下一样,不是可配置的。
	在默认情况下,对sbspace的写操作是使用缓存区的。在创建sbspace时,用户可通过参数将sbspace
	配置成使用缓冲区或不使用缓冲区。

tablespace

tablespace是一个逻辑概念,指一个表或索引所占用的空间。一个tablespace是多个extent的逻辑集合,
可以分布在不同的dbspace或chunk上。gbase8t系统表对表和索引采用了tablespace进行描述。
GBase8t 把分片表、索引的一个分片作为一个tablespace进行管理。每个页、索引在GBase8t内部都有一个
partnum,在GBase8t内部以该编号进行管理。
我们 可以通过查询sysmaster的systabnames表得到一个数据库实例下的所有表、索引的tblspace信息。

extent

extent就是物理上连续数据页的集合,tablespace(表和索引)的存储空间是以extent为单位来分配的。
例如在创建customer表时,GBase 8t将会根据extent size确定该表初始的空间。当向customer表中
不断insert记录时,为表customer分配的空间将被用完,此时,数据库需要为表扩展新的空间,GBase8t
以extent为单位进行扩展,一个extent包含若干物理上连续的数据页。我们可以指定表每次空间扩展
的大小。

大对象存储

简单大对象:
	简单大对象的存储空间blobspace只能用来存储简单大对象数据(text和Byte),blobspace是针对
	text和byte数据的特点进行了特殊设计的一种存储空间。GBase8t使用不同的方法访问不同的存储
	空间数据,简单大对象可以存储在dbspace或者blobspace中,如果简单大对象存储在dbspace上,
	则简单大对象和其他字段作为一个整体存储在dbsapce上,使用56Byte的指针指向简单大对象,简
	单大对象写入此判断方法和普通表数据一致,即先将数据缓存在共享内存的buffer中,然后刷新到
	磁盘中,同时,数据库需要记录简单大对象DML操作的物理、逻辑日志信息。
	
	若简单大对象数据存储在指定的blobspace上,则同样使用一个56byte的指针指向大对象的存储位
	置信息。此时数据库服务器不会使用通常的方法将简单大对象写入到磁盘上,而是通过虚拟端单独
	使用一个较小的缓存将数据直接、快速写入磁盘,类似linght append方式,而不需要占用大量的
	buffer-pool内存空间,从而避免将其他表或者索引从你内存中挤出,所以该方式对系统的影响小,
	写入速度较快,同时对checkpoint无影响。处于对性能的考虑,该方式也减少了逻辑、物理日志量
	,数据库也不将text或者byte数据的日志信息写入逻辑日志、
	物理日志文件。在备份逻辑日志时,
	直接将日志写入逻辑日志备份空间上,但是对简单对象的DML操作(insert、update、delete)将
	日志写到逻辑日志中。

当将简单大对象存储在blobspace上时,对简单大对象数据的读、写过程将有别于普通的方式:

 blobpage buffers 是在GBase8t虚拟段中根据需要申请的用来缓存简单大对象数据blobpage的内存缓存。
 当客户端接收简单 的大对象数据时,数据库服务器端将创建一对blobspace buffers,一个用来读操作,一
 个用来写操作。每一个blobpage buffer的大小为一个blobspace blobpage的大小。每一个用户只能有一组
 blobspace buffers。因此一个用户只能访问一个简单大对象。
 举例:
 客户端应用程序把1KB的简单大对象数据传送到数据库服务器端。数据库服务器将这1KB的信息填入blobspace buffer,当天满一个blobpage时,就只想下一个blobpage。而数据库服务器何时将第一个blobspace buffer
 写入磁盘是由用户定义的blobpage的大小决定的。例如:假设blobpage的大小为32KB,数据库服务器视图以
 32KB为增量读取或者写入数据,如果硬件环境(如磁盘控制器)不支持单个IO操作完成32KB的数据量,则操作
 系统将内部循环多次来完成IO请求。在创建该blobspace buffers的线程结束时,blobspace buffers才会
 被回收。

智能大对象

智能大对象(CLOB和BLOB)必须存储在sbspaces上,智能大对象的存储结构和IO行为由sbspace特性确定。

sbspace的第一个chunk总是包含3个部分:元数据区域、用户数据区域和保留区,其他chunk可以共用第
一个chunk的元数据区域。

元数据区域保存元数据,用于标识sbspace的关键信息和存储在该sbspace上的每一个智能大对象,这样数据
库服务器可以对智能大对象进行操作和恢复。

用户数据区域保存用户定义的智能大对象数据,一个chunk可以有1~2个用户数据区域。
当元数据区域和哟用户数据区域需要更多空间时,可以从保留区进行分配,一个chunk可以有1~2个保留区。
智能大对象存储在sbspace中,通过onconfig参数spspacename指定默认存储空间。可以通过put...in
(sbspace)来指定存储空间,当指定多个空间时,将自动采用round-robin方式将数据均匀存储在多个空间
上。

posted @ 2022-07-27 16:23  乐酷yuan  阅读(132)  评论(0编辑  收藏  举报