
# 相关概念
#### 数据库
数据库用于管理各类数据对象，与其他数据库隔离。创建数据对象时可以指定对应的表空间，如果不指定相应的表空间，相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。
#### 表空间
在GaussDB中，表空间是一个目录，集群中可以存在多个表空间，里面存储的是它所包含的数据库的各种物理文件。由于表空间是一个目录，仅起到了物理隔离的作用，其管理功能依赖于文件系统。
#### 模式
GaussDB的模式是对数据库做一个逻辑分割。所有的数据库对象都建立在模式下面。GaussDB的模式和用户是弱绑定，弱绑定是指虽然创建用户的同时会自动创建一个同名模式，但用户也可以单独创建模式，并且为用户指定其他的模式。
#### 用户和角色
GaussDB使用用户和角色控制对数据库的访问。根据角色自身的设置不同，一个角色可以看作是一个数据库用户，或者一组数据库用户，一个用户唯一对应一个角色。在GaussDB中角色和用户之间的区别只在于角色默认是没有LOGIN权限的。在GaussDB中可以使用角色叠加来更灵活地进行管理。
#### 事务管理
在事务管理上，GaussDB采取了MVCC（多版本并发控制）结合两阶段锁的方式，其特点是读写之间不阻塞。GaussDB的astore存储引擎没有将历史版本数据统一存放，而是和当前元组的版本放在了一起。GaussDB的astore存储引擎没有回滚段的概念，但是为了定期清除历史版本数据，GaussDB的astore存储引擎引入了VACUUM线程。一般情况下，除非用户要做性能调优，否则不用特别关注VACUUM线程。GaussDB的ustore存储引擎是将历史版本数据统一存放到undo回滚段里，由undo回收线程统一清理历史版本数据。此外，GaussDB对于单语句查询（没有使用BEGIN等语句显示启动事务块）是自动提交事务的。
#### TOAST
TOAST（The Oversized-Attribute Storage Technique）是一种特殊的存储机制。TOAST机制的主要目的是为了解决数据库中单个字段过大，无法直接存储在标准数据页中的问题。GaussDB中的page默认大小为8KB，当某行数据大小超过page大小时，数据库会启动TOAST，确保这些大字段能够被有效存储并管理。行外存储是TOAST技术的一部分，该技术将大的字段压缩或切片成多个物理行存到另一张表（TOAST表），而主表只保留对这些大字段值的引用（通常是一个指针）。如果某张表有关联的TOAST表，在PG_CLASS表里的reltoastrelid字段记录该TOAST表的OID；如果没有关联的TOAST表，reltoastrelid的值为0。
