技术开发 频道

主流列式数据库评测:Sybase IQ

  (二) 数据压缩

  Sybase IQ采用sp_iqtablesize('用户名.表名')查看各个表占用的空间大小,也可采用sp_iqdbspaceinfo查看表开销(数据、索引、约束等)的明细。

(DBA)> sp_iqtablesize('DBA.CUSTOMER')          
Ownername  Tablename   Columns KBytes Pages CompressedPages NBlocks
-------------------------------------------------------------------
DBA        CUSTOMER    8       158408 2622  2605            19801  

  Sp_iqdbaspsceinfo的结果如下:

object_name  columns  indexes  metadata  primary_key
-------------------------------------------------------------------
Customer     145M     3.57M    15.2M     15.8M
Lineitem     2.46G    2.14G    22.6M     0B
nation       96K      48K      2.19M     24K
orders       675M     213M     10.8M     170M
part         80.3M    0B       12.1M     21.5M
partsupp     550M     107M     12.5M     122M
region       72K      0B       1.53M     24K
supplier     1.92M    824K     15M       1.09M

  我们将原始csv文件的大小除以IQ数据库的数据大小,得到的倍数作为它们的压缩率,得到下面的结果:

  原始数据大小/数据库大小=1.63 (加索引、约束开销)

  原始数据大小/数据库大小=2.77 (不加索引开销,纯数据)

  (三) 数据查询

  Sybase的缓存大小对性能影响很大,有时甚至对功能也有影响,对数据仓库应用而言,demo数据库的原始配置实在是太低了。由于我们的系统内存充足,我们把最后2个缓冲区大小增加后用新参数文件重新启动数据库,大部分tpch查询速度提高了3到5倍。下面各个测试项目列出的均是采用新参数文件的结果。

[root@redflag11012601 demo]# cat iqdemo.cfg.bad
# iqdemo.cfg
# ------------------------------------------------------------
# Default startup parameters for the ASIQ demo database
# ------------------------------------------------------------

-n  redflag11012601_iqdemo
-x  tcpip{port=2638}

# The following parameters are also found in the configuration file
# /opt/sybase/IQ-15_2/scripts/default.cfg.  Any parameters not specified below
# and not in the start up parameter list, will be added by start_iq
# using default.cfg as a guide.

-c  48m
-gc 20
-gd all
-gl all
-gm 10
-gp 4096

-iqmc 12880
-iqtc 10240

[root@redflag11012601 demo]# start_iq @iqdemo.cfg.bad iqdemo.db

  1. tpch查询测试

  我们将从tpch.org网站下载的源代码编译后,采用dbgen -s10生成一套10GB规模的数据,用qgen产生查询SQL语句,只针对IQ数据库作语法修改,尽量不改变语句的结构。

  测出的结果见原始tpch查询时间表。


  我们看到,SybaseIQ在这方面表现不错,基本上所有的原始脚本都能执行,而且基本没有执行特别慢的语句,所有查询都能在10秒以内完成。稍感意外的是,Sybase不支持SQL标准支持的date''、interval''和extract from用法,只好改用date()、year()等函数。而用于限定结果集行数的top语句同limit或rownum的一个明显区别是要求结果集已经排序,否则虽然也能输出结果,但输出错误提示消息。

0