1、背景
目前数据库行业里,流行的几种关系型数据库产品分别是Oracle、MySQL、PostgreSQL,尤其是现在国产化进程的推进,国内市场数据库产品也是百花齐放,如雨后春笋一般增长到了200多家数据库产品,可以说是只有你想不到的,没有做不到的。当然关系型数据库还是占绝大一部分,而国内的数据库产品路线,也绝大多数都是选择以上几种国外数据库的路线,不得不说,在数据库这个领域,国内确实落后了国外好几十年,希望未来国内能形成好的良性竞争,真正打造出来属于中国的,符合中国特色的数据库产品,并且能推向海外吧。
GBase 8s是南大通用的一款集中式事务型数据库产品,拥有了可以和Oracle媲美的完整方案,尤其是高可用能力,共享集群方案,绝对是国产里能打的一个。刚进入数据库这个行业时,也是作为一个小白,对数据库的理解也就停留在SQL,啥系统都需要用,就是业务系统背后的存数的一个软件,进入之后,发现想的太简单了,第一次知道数据库还有这么多的类型,面向不同的业务场景,需要选择更匹配更适合的产品,他就像汽车的引擎一样,虽然被包装了起来,但是却是业务系统里最核心的一个组件,引擎就决定了你的车能走多远,能用多久。上学的时候就发现其实越底层的东西越不好学,在学数据库的时候发现也是非常的难,接触了也将近三年了,感觉还是没有摸到入门的门槛的感觉,还是个小白,数据库产品路线很多,而且各家都有各家的特色,都是独成体系,只能说面向不同的场景应运而生的吧,也没有谁好谁就差的说法,但是确实带来的学习的难度。经常会有人拿自己熟悉的数据库产品去找其他产品对应的东西,经常也是会被咨询到,网上也没找到很好的对比材料,只能自己结合一些搜索到的信息进行整理,下边就是结合我刚入门的理解,对GBase 8s与主流数据库产品的存储结构的概念做一些对比。
2、存储结构介绍
存储结构分为物理存储结构和逻辑存储结构。
2.1、GBase 8s
GBase 8s存储结构大概画了一下,如下图:
从图中可以看出,GBase 8s的物理存储结构是以page页为最小存储单位,而Extent是一组连续page的集合,是最小的存储单位分配空间,chunk块则是最大的存储单元,可以使用操作系统上的文件,也可以使用裸盘。
逻辑架构主要是两个存储空间,一个是数据库的空间dbspace,一个是表的空间tblspace,dbspace可以包含多个chunk块,tblspace则是分配给特定表或者分段的所有磁盘空间。
2.2、Oracle
Oracle存储结构以自己的理解画了一下如下:
数据文件就是基本上教程里都介绍的物理存储结构,而左侧则全部叫逻辑存储架构,最大的是表空间,表空间可以包含多个数据文件。
2.3 PostgreSQL
PG又称为最像Oracle的开源数据库产品,所以这里就不在赘述,类比Oracle。
2.4 MySQL
MySQL-InnoDB引擎结构图找了一下,如下图:
3、对比情况
从这些结构图来看,这些主流数据库的存储结构非常类似,只不过有些放在逻辑存储架构里,有些放在物理存储架构里,可能也是对物理存储架构和逻辑存储架构定义理解上的一些偏差导致的,抛开来讲,简单匹配一下就如下表所示,不一定准确,整理如下:
Oracle | PostgreSQL | MySQL | GBase 8s | 备注 |
数据块(Block) | 页(Page) | 页(Page) | 页(Page) | 最小存储单元 |
区(Extent) | 区(Extent) | 区(Extent) | 区(Extent) | 分配存储空间的最小单元 |
段(Segment) | 段(Segment) | 段(Segment) | 表空间(Tblspace) | 存特定数据库对象,由连续的,不连续的最小存储空间分配单元构成 |
数据文件 .dbf存放数据库信息 | datafile | 数据文件 .frm存放表结构 .ibd存放表数据和索引 | 块(Chunk) | 最大的物理存储单元 |
表空间(tablespace) | tablespace | tablespace | 数据库空间(dbspace) | 最大的逻辑存储单元 |
模式(Schema)≈user | schema | schema | schema≈user | 表、索引、约束、SPL等的完整集合 |
数据库database 跨库查询需要使用dblink | database 跨库查询需要使用dblink | database≈schema dbname.schema.table_name就可以实现跨库查询 | database dbname:schema.table_name就可以实现跨库查询 | |
实例Instance≈database | Instance | Instance | Instance | 资源的完全隔离 |
概念上来讲,各类数据库产品都有相似的概念,但具体实现、组织形式却是各有千秋,但是也就是这些组织形式的差别导致了各个产品之间的鸿沟,也带来了一些互相兼容的问题,但数据库始终是用来存数和算数的软件,只要功能OK,性能稳定不丢数才是最重要的东西,没有包打天下的数据库,只有适合自己的数据库。