ITPub博客

首页 > 数据库 > 国内数据库 > SQL Server与GBase 8s概念及对比

SQL Server与GBase 8s概念及对比

原创 国内数据库 作者:CallMeJasonGao 时间:2021-07-23 11:35:23 0 删除 编辑


1.1 实例(Instance)

在GBase 8s中,实例包括共享内存、进程、存储。

在SQL Server中,实例是后台进程和数据库文件的集合。

GBase 8s和SQL Server都支持在一台机器安装和同时运行多个实例。

1.2 数据库(Database)

GBase 8s和SQL Server中的数据库(database)都是一系列包含特定用途对象的集合。从SQL Server 2000版本开始支持Schema,Schema在SQL Server中的应用并不普及

1.3 存储(Storage)

GBase 8s中存储概念从大到小如下表

GBase 8s

1 数据空间(dbspace)

2 块(chunk)

3 表空间(table space)

4 区间(extent)

5 页(page)

GBase 8s存储相关限制 最大值

一页包含的数据行数 255

一个表或者分片最大的行数 4,277,659,295

一个表或者分片最大的数据页数 16,775,134

一个表或者分片最大占用的空间大小

(除BLOB,CLOB,BYTE,TEXT以外) 33,818,671,136 Byte

一行记录的最大rowsize 32,767

表最大支持的字段数 32,767

一个复合索引支持最多的列数 16

单个SQL语句的最大长度 2G

一个Instance最大支持的database数 21,000,000

一个Instance最大支持的tables数 477,102,080

一个Instance最大支持的活动用户数active users 32,767

一个session最大同时访问的database数 8

最大的页清理进程page-cleaner 128

一个dbspace上最大支持的partition数 2K pagesize 1048445

4K pagesize 1048314

一个用户同时可以使用Lock Table锁住的表的个数 32

一个dbspace的最大空间

一个chunk的最大空间 2K pagesize 4T

4K pagesize 8T

一个Instance最多支持的chunks数 32,766

一个chunk最大存储的数据页数pages 2,000,000,000

一个Instance最大支持的dbspace数 2047

一个Instance最大支持的存储空间 128 PB

SQL Server是基于Windows平台的产品,有两种数据存储文件,分别是数据文件和日志文件,其中数据文件是以8K(=8192Byte)的页面作为存储单元。而日志文件是以日志记录作为存储单元。

 

数据页面页首:96个字节,保存着页面的系统信息,如页的类型、页的可用空间量、拥有页的对象的对象 ID 以及该页面所属于哪个物理文件。

数据区:对应于上图中所有数据行的总区域,存放真正的数据,是以Slot为单位。一个Slot就是对应于一条数据记录行,从0开始编号,以16进制反序保存,Slot0,  Slot1....。行偏移数组:用于记录该数据页面中每个Slot在数据页面所处的相对位置,便于定位和检索每个Slot在数据页面中的位置,数组中每个记录占两个字节。虽然SQL Server中数据文件存储单位是页面(Page),但实际SQL Server并不是为页面为单位给数据分配空间,SQL Server默认的存储分配单位是盘区。这样做的主要原因是为了提高性能。为了避免频繁的读写IO,在表或其它对象分配存储空间,不是直接分配一个8K的页面,而是以一个盘区(Extend)为存储分配单位,一个盘区为8个页面(=8*8K=64K)。

在SQL Server的实际使用中,用户一般不涉及上述底层存储的设计,出于寻址效率(TLB)和IO效率的原因,数据库页面大小必须是OS页面大小的某个倍数,这是由平台硬件体系结构驱动的。x86体系结构的页面大小为4k,较新的体系结构提供大页面,SQL Server利用它们进行内存分配。

1.4 锁(Locks)

建表语句中的LOCK MODE子句指定了GBase 8s的锁模式,行级锁或页级锁。GBase 8s中默认是页级锁(可通过配置参数DEF_TABLE_LOCKMODE或环境变量修改这个默认值)。

GBase 8s的锁结构存在共享内存中,而不是dbspace中。

SQL Server默认锁级别为行级锁,锁的粒度如下表

资源 说明

RID 用于锁定堆中的单个行的行标识符

KEY 索引中用于保护可序列化事务中的键范围的行锁

PAGE 数据库中的 8 KB 页,例如数据页或索引页

EXTENT 一组连续的八页,例如数据页或索引页

HoBT 堆或 B 树。 用于保护没有聚集索引的表中的 B 树(索引)或堆数据页的锁

TABLE 包括所有数据和索引的整个表

FILE 数据库文件

APPLICATION 应用程序专用的资源

METADATA 元数据锁

ALLOCATION_UNIT 分配单元

DATABASE 整个数据库

1.5 隔离级别(Isolation)

GBase 8s为应用提供的隔离级别及对应关系请参考下表。

GBase 8s SQL Server ANSI

DIRTY READ READ UNCOMMITTED read uncommitted

COMMITTED READ默认 READ COMMITTED 默认 read committed

REPEATABLE READ REPEATABLE READ repeatable read

REPEATABLE READ SERIALIZABLE serializable

CURSOR STABILITY SNAPSHOT

COMMITTED READ LAST COMMITTED READ COMMITTED SNAPSHOT

GBase 8s提供4种主要隔离级别,它们为处理数据并发性问题提供一些机制:

脏读隔离(读未提交)

提交读隔离(读提交)

游标稳定性隔离

可重复读隔离(可重复读和可系列化)

DIRTY READ脏读隔离级别(读未提交)

脏读隔离不需要在读取的行上使用锁,因此不检查所需的行上是否有锁。使用该隔离级别的会话可能会得到脏数据,即该数据被另一个会话更新但尚未提交。 

对于非日志数据库,这是唯一可以使用的隔离级别。

以上列出的所有 3 种现象都可以在这个隔离级别上出现。

COMMITTED READ提交读隔离级别(读提交)

提交读隔离仅允许会话读取已提交的行。它不在正在读取的行上放置锁,但检查该行是否放置了锁。因此这个隔离级别不会发生脏读。

CURSOR STABILITY游标稳定性隔离级别

游标稳定性隔离在读取的行上放置一个共享锁,并且在锁定下一个行时释放该锁。

这个隔离级别能够阻止脏读和非重复读现象。

REPEATABLE READ可重复读隔离级别

可重复读隔离级别相当于 ANSI SQL 92 中的可重复读和可系列化。

这个隔离级别除了能够阻止脏读和非重复读现象之外,它还能阻止伪读现象。

如果数据库服务器需要为使用可重复读隔离的会话对表执行序列读,它将在该表上放置一个共享锁。不过,如果使用了索引扫描的话,共享锁仅能锁定与受影响的行相关的索引键。

语句SET ISOLATION COMMITTED READ加上LAST COMMITTED关键字选项会减少锁冲突的风险。此语法告诉服务器返回最近提交的行版本,即使另一个并发会话持有一个独占锁。这种隔离级别更近似于SQL Server的READ COMMITTED。

于此相关的数据库参数USELASTCOMMITTED 指定一种能使 COMMITTED READ 隔离级别的 LAST COMMITTED 功能隐性生效的隔离级别。

1.6 标识符(Identifiers)

数据库对象的名字由标识符来表示,如表名、字段名、索引名、视图名、存储过程名称等等。

GBase 8s最大表名长度128个字节,但不支持“#”,“$”也不可以是表名的第一个字符,不符合GBase 8s命名规则的标识符,需要在移植时用正确的名称替换。

SQL Server中标识符的首字符必须统一码(Unicode)2.0标准中定义的字母,包括拉丁字母a~z和A~Z,以及来自其他语言的字符,或者是下划线“_”、符号“@”或者数字符号“#”。要注意的是在 SQL Server中,某些处于标识符开始位置的符号具有特殊意义。以“@”符号开始的标识符表示局部变量或参数;以一个数字符号“#”开始的标识符表示临时表或过程,如表“#gzb”表示一张临时表;以双数字符号“##”开始的标识符表示全局临时对象,如表“##gzb”则是全局临时表。标识符后续字符可以是以下3种:统一码(Unicode)2.0标准中所定义的字母、来自拉丁字母或其他国家/地区脚本的十进制数字、“@”符号、美元符号“$”、数字符号“#”或下划线“_”。注意标识符不能是Transact-SQL的保留字也不允许嵌入空格或其它特殊字符。

1.7 大小写(Case sensitivity)

GBase 8s默认大小写不敏感,但在引号中的内容则是大小写敏感的。

例如: GBase 8s中gbase == GBASE == GBase=="gbase" != "GBASE"。

所以在导出建表语句中,带双引号的表名和字段名,都要加以处理才可以被GBase 8s使用。

SQL Server默认也是大小写不敏感。

1.8 用户(User)

SQL Server需要创建数据库用户来进行数据库权限的管理。而GBase 8s则可以使用操作系统用户来进行同等的权限管理,可以使用Grant、Revoke命令对用户进行权限的授予与回收。不同数据库主机间的数据库访问,如同义词、跨实例视图等,需要在两台服务器上配置相应用户的信任关系,具体配置方法与使用的平台相关。

gbasedbt用户是GBase 8s的超级管理员。

GBase 8s同时允许用户通过内部授权服务(比如 Kerberos 或者 Microsoft Active Directory) 来连接数据库而无需系统用户。这种方法使系统可以通过映射系统中已存在的除gbasedbt和root外的其他用户,来访问数据库。这种机制将会减少为了使用数据库而创建的大量系统用户。减少DBA的工作量,增加系统的安全系数。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980453/viewspace-2782886/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-09-28

  • 博文量
    7
  • 访问量
    5383