编者言:数据显示国内商用数据库市场90%的市场份额由国外品牌占据,日前ITPUB一项关于国产数据库的使用调查结果非常值得深思,数据显示超过50%的网友从未使用过国产数据库软件,甚至有的网友都不知道还有国产数据库。根据小编所查,国产数据库的历史可追溯的至少有十年,经过十余年的发展,国产数据库产品目前到底处于一个什么样的水平?与国外品牌数据库有差距这是不容否认,但差距到底在哪里?十年来又有些什么样的进步?是否能满足目前一般企业的信息化需求?近期ITPUB开通了国产数据库专区,并已经提供了达梦数据库本地下载,不少ITPUB网友已经开始进行首次尝试或者说是体验。俗话说的好,是好还是坏,是骡子还是马还要拉出来溜溜才知道。
ITPUB网友实战国产数据库系列投稿邮箱:[email protected]
作者简介:沈刚,网名大头刚,数据库技术爱好者。现任职于北京某互联网公司,提供数据库的规划与运维支持。实践经验丰富,擅长数据库诊断、性能调整等。MySQL技术征文大赛第一名。详情见:http://tech.it168.com/focus/200905/mysql515/index.html
据称达梦数据管理系统DM是达梦数据库有限公司完全自主开发、具有完全自主知识产权的通用数据库管理系统。下面我将根据对DM的试用,简单介绍一下DM的部分功能。
首先,就数据库的主要功能将DM与其他主流数据库进行对比,具体情况见表1-1:
DM与Oracle、Mysql、PostgreSQL功能对比表:1-1
从表1-1可以看出,达梦数据库(DM6)与ORACLE10、MYSQL5.1、PGSQL8.4等目前主流数据库相比,功能并不比其他数据库少。当然,有了这些功能,也并不一定代表能高效、稳定的使用这些功能,例如集群这个功能,目前除了ORACLE的集群能在正式环境高效、稳定的使用外,其他的数据库虽说都有这个功能,但是目前还没有人敢在正式环境使用。这还需要不断的测试、改进。
下面我将从用户的角度出发,对DM的分区、全文检索、物理增量热备功能分别进行具体的介绍。
测试环境:
[root@test ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
[root@test ~]# uname -a
Linux test 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
[root@test ~]# free -m
total used free shared buffers cached
Mem: 3952 1443 2508 0 173 1101
-/+ buffers/cache: 169 3783
Swap: 4000 0 4000
[root@test ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5310 @ 1.60GHz
一、安装
DM的安装相对来说是很简单的,基本就是傻瓜式安装,解压后直接DMInstall安装,这里使用的是静默安装,使用-i参数。
[root@test dmdb]# ./DMInstall.bin -i
Extract install files..........
欢迎使用达梦数据库安装程序
请输入Key文件的路径地址[/u01/dmdb/dm.key]:
有效日期: 无限制
服务器颁布类型: 开发版
发布类型: 试用版
用户名称:
授权用户数: 1
并发连接数: 25
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 378M
请选择达梦数据库安装目录 [/opt/dmdbms]:/u01/dmdb/dmdbms
可用空间: 144G
请确认安装路径 (Y/y,N/n) [Y/y]:y
是否初始化数据库 (Y/y,N/n) [Y/y]:y
是否安装示例库 (Y/y,N/n) [N/n]:y
请输入数据文件路径 [/u01/dmdb/dmdbms/data]:
数据所需空间: 415M
数据可用空间: 144G
请确认数据文件路径 (Y/y,N/n) [Y/y]:y
是否修改数据库初始化参数 (Y/y,N/n) [N/n]:n
是否修改SYSDBA密码 (Y/y,N/n) [N/n]:n
是否修改SYSAUDITOR密码 (Y/y,N/n) [N/n]:n
安装前小结
安装位置: /u01/dmdb/dmdbms
数据安装位置: /u01/dmdb/dmdbms/data
所需空间: 378M
可用空间: 144G
数据所需空间: 415M
数据可用空间: 144G
版本信息: 开发版
有效日期: 无限制
安装类型: 典型安装
是否确认安装(Y/y,N/n) [Y/y]:y
安装过程很简单,按照提示一路下来就可以了。
启动DM数据库。
[root@test data]# /etc/init.d/dmserverd start
Starting dmserverd: [ OK ]
[root@ test ~]# ps -ef|grep dmserver
root 27180 1 0 Mar26 ? 00:00:00 /u01/dmdb/dmdbms/bin/dmserver dm.ini -noconsole
root 27815 27603 0 18:16 pts/0 00:00:00 grep dmserver
可以看到,进程已经起来了。
DM提供了交互式工具ISQL来进行数据库的管理,下面登录数据库。
[root@test log]# rlwrap /u01/dmdb/dmdbms/bin/isql SYSDBA/SYSDBA@localhost
SQL>desc v$sersion;
第1行: 'desc'附近有语法错误
SQL>describe v$sersion;
describe v$sersion;
COLNAME TYPE LENGTH NULLABLE
0 rows got
time used: 47.242(ms).
select * from v$version;
BANNER
1 DM Database Server V6.0.2.51-Build(2009.12.23)
2 DB Version: 0X1022b
2 rows got
time used: 0.231(ms).
SQL>create database mytest datafile '/u01/dmdb/dmdbms/data/mytest01.dbf' size 500;
create database mytest datafile '/u01/dmdb/dmdbms/data/mytest01.dbf' size 500;
time used: 3784.885(ms).
SQL>set current database mytest;
set current database mytest
设置当前数据库为 'mytest'
time used: 0.208(ms).
DM的isql没有历史回调功能,describe不能简化成desc。Select出来的数据,列没有对齐,多了一个行序号的列。个人感觉这个可以调整一下,毕竟大多数数据库使用者都习惯了通用的数据库命令,这样有利于DM的推广和发展。
二、分区功能体验
数据库分区使表和索引能够被划分成更小、更易于管理的部分,这对于任何具有高性能和高可用性需求的大型数据库来说都是一项重要的要求。使查询得以扫描较少的数据,减少I/O量,从而提高查询性能。DM的分区功能分为垂直分区和水平分区。
DM与Oracle、Mysql、PostgreSQL 分区功能对比 表:2-1
DM6.0 | Oracle 10g | Mysql 5.1 | PostgreSQL 8.4 | |
范围(Range) | 支持 | 支持 | 支持 | 支持 |
哈希(Hash) | 支持 | 支持 | 支持 | 支持 |
混合(范围+哈希) | 不支持 | 支持 | 不支持 | 支持 |
列表(List) | 不支持 | 支持 | 支持 | 支持 |
垂直分区 | 支持 | 不支持 | 不支持 | 不支持 |
2.1 水平分区
DM6对表的水平分区有2种,范围分区(RANGE)和哈希分区(HASH)。
2.2.1 HASH分区
DM的HASH分区对分区列值进行HASH计算后,确定实际数据存放的具体位置。主要用来确保数据在预先确定数据的分区中平均分布。我们来看一下表的定义:
SQL>select tabledef('mytest','sysdba','test_part2');
1 CREATE TABLE "test_part2" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY HASH("id") PARTITIONS 5
1 rows got
2.2.2 RANGE分区
DM的范围分区按照分区列的数据范围,确定实际数据存放的位置。通过LEFT或者RIGHT关键字来指定哪个值是第一个分区的上边界,还是第二个分区的下边界。我们来看一下表的定义:
SQL>select tabledef('mytest','sysdba','test_part3');
1 CREATE TABLE "test_part3" AT "mytest"
(
"id" INTEGER,
"t1" VARCHAR(10),
"t2" VARCHAR(10),
"t3" VARCHAR(10),
"t4" VARCHAR(10),
"t5" VARCHAR(10),
PRIMARY KEY("id"))PARTITION BY RANGE("id") LEFT FOR VALUES(5, 10)
1 rows got;
从以上内容可以看出,DM的水平分区功能与其他传统数据库系统的功能类似,能满足对大数据表的水平分区管理。
2.2 垂直分区
垂直分区功能是DM数据库系统在分区上比较特别的一个功能,因为在目前的主流数据库系统中,还没有对这个功能有比较全面的应用,下面重点介绍一下垂直分区。在DM数据库管理系统中,垂直分区的实现方式是:将垂直分区表分拆成多个表,每个表包含较少的列。定义一个垂直分区表,系统将自动为其创建一个分区基表和若干个分区子表。分区基表不保存实际数据,只保存表定义、分区信息,实际数据保存在分区子表中。每个分区子表包含定义的分区子表列和CLUSTER PK列。并且,在所有的分区子表上建立了CLUSTER PK索引。这样拆分后,每个子表只包含较少列数据,通过CLUSTER PK列进行行匹配,各个分区子表中的每个逻辑行与其他分区子表的相同逻辑行匹配,可以方便的还原主表定义的完整数据。(未完待续)