随着互联网技术的发展,企业及政府信息化的不断深入,应用的复杂性日益增强。这些需求推动着数据密集型应用向海量和智能的方向发展。同时,数据仓库和在线分析等应用迫切需要实时高效的数据处理技术。传统的基于行存储的数据库技术已经出现了技术瓶颈。如何在快速执行复杂查询的同时,还能缩小存储空间和节约成本是目前数据库技术研究的热点问题。本文介绍一种新型数据库技术及其验证系统——基于列存储的关系型数据库 HUABASE 。
列存储技术的特点是数据查询效率高,读磁盘少,存储空间少,是构建数据仓库的理想架构。列数据库的应用价值来自于它对复杂查询的快速响应以及数据压缩所带来的存储优势,使其在商业智能方面具有良好的发展前景。根据 Gartner 2010 年 1 月关于数据仓库的分析报告,列数据库与传统关系型数据库相比,在数据分析方面表现出卓越的性能,因此,列数据库技术的研究和产品开发在学术界和工业界受到广泛关注。
列数据库的学术价值在于其独特的数据存储理念,以及基于列的存储为企业决策分析、数据仓库、商业智能这些应用领域所带来的效率和空间上的方便和优势。目前开源列数据库有 C-Store , rasdaman , MonetDB 等,商用列数据库有 Sybase IQ 、 Vertica Analytic Database 、 ParAccel Analytic Database 、 EXASOL EXASolution 等。近 5 年来在国际一流的数据库会议 VLDB 、 SIGMOD 、 ICDE 上有关这个领域的优秀论文也频频出现。
HUABASE 简介
关系型数据库是一个用以存储及处理结构化数据的软件系统,其数据分为两个层次:一是逻辑数据,它是由表、记录等组成;另一是物理数据,它代表数据库怎样存储逻辑数据。不同的关系数据库系统或许有相同的逻辑数据,但它们通常有不同的物理数据。实现数据库物理数据的方法有两种:一是基于行存储,另一是基于列存储。对于基于行存储的实现方法,它把逻辑数据的整条记录存储到数据块中,为了提高查询速度,要为某些列建立 B+ 树等类型的索引;对于基于列存储的实现方法,逻辑数据中的记录不直接按条映射到物理数据中,而是把记录按列分开,把所有记录相同列的值存在一起,同时提供连接数据能够把记录相应的列值重新组合起来形成记录。
如图 1 所示, HUABASE 将记录进行分段存储,表段内数据按列排序存储,表段中列值的个数有一个上限,连接数据存储记录号与数据块序列号。数据插入时,尽管列值的位置会发生变化,只要它仍然在同一个数据块中,连接数据就不需要更新,除非由于数据块溢出导致列数据被移到新的数据块中,数据块的序列号才发生变化。连接数据可以用来把相应的列值连接起来形成一条记录。
图 1 逻辑数据与物理数据示例
HUABASE 非常适合于商业智能分析领域,如图 2 所示, HUABASE 用户可以利用 ETL 工具从多种数据源抽取元数据然后存放到 HUABASE 数据库中, HUABASE 可以存放和管理海量的数据并用于智能分析,比如:一个数据库最大可以支持 232 个表空间;一个表空间最大可以支持 256 个数据文件;一个数据文件最大可支持 32TB 数据。
图 2 HUABASE 概况
HUABASE 体系架构
HUABASE 数据库管理系统是一个三层架构:核心层、接口层和应用层。核心层完全基于 Java 实现,包括支持列存储的所有关键组件。接口层支持 ODBC 和 JDBC 标准接口。应用层支持各种数据库应用开发, HUABASE 本身提供了多种基于 JDBC 接口的数据库管理工具。如图 3 所示。
图 3 HUABASE 体系架构
1) 核心层组件:
列式存储 :支持记录的按列存储、实现了高效的数据压缩和稀疏索引技术,可以极大地提高存储效率和查询性能。
缓存策略 :支持多种数据块缓冲机制,比如持久缓冲区、时钟缓冲区、 FIFO 缓冲区、 LRU 缓冲区。
加锁机制 :数据块锁是为了保持数据块的操作一致性,支持排它锁、共享锁、增量排它锁、增量共享锁。
查询处理 :支持 SQL-92 和部分 SQL-99 标准、应用多种查询优化策略,在复杂查询上具有比基于行存储的数据库系统更优越的性能。
安全管理 :支持数据的加密存储和传送,保护用户数据的隐私和安全。
事务处理 :支持事务的原子性、一致性、隔离性和持久性。
日志管理 :支持日志的回滚和重做,确保系统数据的完整性。
全文搜索 :支持对大文本列的全文搜索方式,可以有效提高大文本的查询效率。
2) 接口层组件:
ODBC :支持 ODBC 标准接口,应用程序可以通过该接口访问 HUABASE 数据库。
JDBC :支持 JDBC 标准接口, Java 应用程序可以通过该接口访问 HUABASE 数据库。
3) 应用层组件:
应用程序 :可以基于 ODBC 和 JDBC 接口开发列数据库应用。
数据库管理器 :基于 Web 的数据库管理器,可以从 Web 浏览器登录,方便远程管理 HUABASE 数据库。根据用户角色,可以管理当前数据库的模式、表或用户等。
命令编辑器 :基于图形界面的命令编辑工具,可以方便地提交各种查询和操作命令。
命令行工具 :命令行工具支持交互模式、命令模式和批处理模式。适合管理员做各种管理和维护操作。
HUABASE 关键技术
HUABASE 支持关系型数据库的核心功能,在列存储方面的关键技术包含以下三个方面:
1) 数据压缩技术
基于行存储的关系型数据库一般只能做到对数据块的压缩。而基于列存储的 HUABASE ,采用了多种数据压缩机制,比如同一列中相同的值只存放一份;对于整型数据,只存放相邻列值的差。这些机制可以实现更高的数据压缩效率。列数据库按列存储并在列上进行压缩的技术,在构建大型数据仓库的时候可以表现出突出的优势,节省大量的存储空间。
2) 查询优化技术
基于行存储的关系型数据库查询时,不能只读取部分列,所有列都必须读取到内存中然后再去掉不需要的列,这样就导致很多不必要的硬盘输入输出。而基于列存储的 HUABASE ,由于它把记录的列分开存储,查询引擎可以按需读取列,从而减少了硬盘输入输出,提高了数据库的查询性能。
3) 稀疏索引技术
基于行存储的关系型数据库一般都是稠密索引,不仅增加存储空间,也增加了数据更新时的代价。因此,为表的所有列都建立索引就不太现实,如果对一个未加索引的列进行查询,系统不得不做全表扫描,导致数据库的性能严重恶化。而基于列存储的 HUABASE 所建立的索引是稀疏索引,列值已被排序存储,索引只建立到数据块级,当查询通过索引定位到数据块后,就可以使用二分法查找,这样索引的存储空间很小,维护代价很低,可以给所有需要索引的列都建立索引,从而显著提高了数据库的查询性能。