【IT168专稿】2010年岁末,国产数据库之一的南(开)大(学)通用到我们单位作技术交流,对我们已有的一个应用完成了数据库结构的迁移,并留下了一套安装文件。我终于目睹了了这个神秘的列式存储数据库的真容。给大家分享一下我的感受。
南大数据库的命名很有意思,用最后一位字母代表的英文单词来表示数据库的大致用途:g通用,s安全,a就是分析了。从命名可以看出,他们的思路是按用途来细分产品,而不是像Oracle那样在创建数据库的时候由用户指定用途来配置不同的初始化参数。按照软件界的常识,通用的软件性能一般不如专用,那么我们可以想见,这个分析型数据库的分析性能应该比较好。
列存储数据库是相对于传统的以记录或数据行(Record,Row)为单位进行数据处理的数据库来说的,它以数据表中的列(Column)为单位对数据进行存储和查询等处理。传统的以记录为单位进行查询处理的数据库如Oracle等又称为行存储数据库。列存储数据库的主要优势在于采用了以数据列为单位进行存储的模型,该存储模型非常有利于对数据库进行高效的压缩从而减少数据规模。此外,基于列存储模型的查询分析器与传统的行存储模型相比,节省了存储空间和I/O带宽,从而提高了数据库的性能,特别是在数据规模比较大的情况下,列存储数据库更有性能优势。
GBase的存储和索引技术参见《GBase 8a数据库技术白皮书》,这里不做深入探讨。
废话少说,下面进入我的简单评测环节。
一、安装
我用于测试的机器是一台4颗6核CPU的PC服务器,操作系统是简体中文Windows 2008 R2标准版,我用的安装文件是GBase8a_8.3.1.4_build3.6_Windows64.exe (91,043,199 字节),这是一个x64平台的安装文件,与目前其他主流商用数据库动辄几百兆甚至几个G的安装文件比起来,这是一个相当小的安装文件。安装界面全是图形交互式的,很简单,也没有太多配置项。只有一个root用户的口令需要输入,进行到这一步时我有些奇怪,不是数据库用户吗,怎么叫root?而且像一个Unix操作系统的用户?可能是为了跨平台的需要吧,但用户名应该是GBase 8a软件的设计人员可以自己设定的。
安装完成以后,在开始/所有程序下新增了一个GBase的菜单项,有企业管理器的快捷方式,数据库后台服务默认是自动开启的。
作为一个评测,我们并不急于开始使用,而是先看一下数据库安装在磁盘上的文件和目录。
2010/12/13 08:47 <DIR> .
2010/12/13 08:47 <DIR> ..
2010/12/13 08:47 <DIR> Config
2011/01/07 10:43 <DIR> GBaseStudio
2010/12/13 08:47 <DIR> JDBC
2010/12/13 08:47 <DIR> jre
2010/12/13 08:47 <DIR> ODBC
2010/12/13 08:47 <DIR> Server
2010/12/13 08:47 <DIR> StatusMonitorTool
2010/12/13 08:48 <DIR> Uninstall
如上图所示,安装程序在磁盘上创建了几个目录,分别用于存放配置信息、服务器、管理工具、状态监控工具、还包括一个java运行环境和数据访问接口。
再用tree命令查看详细的目录结构,可以发现,管理工具、状态监控工具都是基于java的应用。而其他目录相当简单:
F:.
├─Config
├─JDBC
├─ODBC
├─Server
│ ├─bin
│ ├─cache
│ ├─data
│ │ ├─gbase
│ │ └─test
│ │ └─t.GED
│ └─share
│ ├─charsets
│ └─english
└─Uninstall
└─resource
如上图所示,Server目录既是数据库服务器可执行文件的存放地,也是数据的存放地,share这个目录和前面的root用户名一样似曾相识。没错,这与mysql的目录结构相似,请看下面的MySQL 5.4目录结构:
D:.
├─bin
├─data
│ ├─employees
│ ├─mysql
│ └─test
└─share
├─charsets
├─chinese
└─english
目录相似以外,那么文件呢,这次我们分别比较gbase目录和test结构:
2010/12/13 08:47 <DIR> . 2009-09-29 10:09 <DIR> .
2010/12/13 08:47 <DIR> .. 2009-09-29 10:09 <DIR> ..
2010/11/06 13:26 12,884 bitmap_join_index.frm
2010/11/06 13:26 0 bitmap_join_index.MYD
2010/11/06 13:26 4,096 bitmap_join_index.MYI
2010/11/06 13:26 8,742 cache_access_info.frm
2010/11/06 13:26 0 cache_access_info.MYD
2010/11/06 13:26 1,024 cache_access_info.MYI
2010/11/06 13:26 8,820 columns_priv.frm 2009-09-29 10:09 8,820 columns_priv.frm
2010/11/06 13:26 0 columns_priv.MYD 2009-09-29 10:09 0 columns_priv.MYD
2010/11/06 13:26 4,096 columns_priv.MYI 2009-09-29 10:09 4,096 columns_priv.MYI
2010/11/06 13:26 9,582 db.frm 2009-09-29 10:09 9,582 db.frm
2010/11/06 13:26 880 db.MYD 2009-09-29 10:09 880 db.MYD
2010/11/06 13:26 5,120 db.MYI 2009-09-29 10:09 5,120 db.MYI
一目了然,不需要更多地说明了,从额外多出的表名可以推测,gbase用到了位图索引和访问信息缓存。这可能与gbase高效查询有关。再在test数据库中创建一些表来看test目录的对比:
2011/01/07 14:00 <DIR> . 2010/09/27 21:02 <DIR> .
2011/01/07 14:00 <DIR> .. 2010/09/27 21:02 <DIR> ..
2010/09/13 12:37 0 .empty
2010/12/13 21:44 9,856 hu41.frm 2010/09/27 21:06 8,554 d.frm
2011/01/07 14:10 <DIR> hu41.GED 2010/09/27 21:10 98,304 d.ibd
2010/12/13 21:47 10,140 ren41.frm 2010/09/21 09:48 9,856 hu.frm
2011/01/07 14:26 <DIR> ren41.GED 2010/09/21 10:00 402,653,184 hu.ibd
2010/12/13 09:12 8,658 t.frm 2010/09/21 10:31 8,688 t5_3_1.frm
2010/12/15 10:17 <DIR> t.GED 2010/09/21 10:31 98,304 t5_3_1.ibd
2010/12/13 10:00 8,714 tcube.frm 2010/09/27 21:02 8,660 tcube.frm
2010/12/15 10:21 <DIR> tcube.GED 2010/09/27 21:02 98,304 tcube.ibd
这下我们可以发现GBase和Mysql的数据文件有着明显的区别,我们知道,后缀名为frm的文件是表结构定义文件,后缀名为ibd的文件是innodb数据引擎的数据文件。那么我们可以合理地推测,GED后缀的目录下存放着GBase的数据文件。至于各个文件的具体含义,这里不准备深入探究,还是尽快转到数据库功能和性能测试上来。