国产数据库对比
刚参加工作的时候,如果偶然听说一个不熟悉的数据库领域知识,会尽快找时间上网查一查资料,避免被别人问住漏了底,然而近几年新的知识、概念、国产数据库如雨后春笋般疯涨,分布式、云原生、自治、HTAP、CAP、BASE、AI、容器、K8S等比比皆是,国产数据库领域更是肆无忌惮、变本加厉,截止2023年12月1日已有288种国产数据库,好像回到大学课堂,当高数老师开始写下1+1时自己走神了几秒钟,回过神时突然发现满黑板的复杂公式推导过程,这种无力感相信每位DBA都有体会。
近期周围朋友突然开始讨论一种没听过的数据库:崖山数据库,不知不觉又落伍了,赶紧学吧,不卷能咋整呢。
查看墨天轮排行榜,崖山数据库本月排第14名。
通过热度曲线可以看到,从2023年9月份排名开始直线上涨。
由于Oracle数据库多年的霸主地位,导致很多人会不自觉将任何一种国产数据库去和Oracle做对比,哪些国产数据库最像Oracle数据库,包括体系结构、运维习惯、语法兼容性、架构类型等?
早期刚刚接触到达梦数据库时,感觉这个国产数据库很像Oracle数据库,甚至有时遇到部分达梦数据库的问题在网上搜索不到答案,将关键词替换为Oracle就可以解决问题,但达梦数据库仍和Oracle有很多不同,如果将达梦数据库完全按照Oracle数据库来运维,还是有很多行不通的地方,下面简单整理了达梦和Oracle的同:
达梦数据库
归档:
DM数据库不是等REDO写满切换后生成ARCHIVE,而是在写REDO之后多写入一份ARCHIVE。
Redo管理:
支持resize语句,简化了扩容redo操作,但只能调大,不能调小,也不支持删除操作。
表空间管理:
1.drop tablespacce cjc_tbs; 不需要添加类似oracle的including contents and datafiles等参数,默认自动删除物理文件,
2.size 不能指定单位,默认MB;
3.MAIN表空间,类似Oracle USERS表空间;
内存管理:
达梦不支持类似Oracle ASMM、AMM自动管理功能,BUFFER等内存组件需要手动配置。
AWR:
在达梦官网看到了AWR,迫不及待的在测试库立即启用了AWR功能,每60分钟收集一次快照,对比生成的报告和Oracle AWR相似度很高,但过了不到1个月,发现SYSAUX表空间上涨了将近10GB数据,WRH$_开头的表很大,例如WRH$_SQL_STAT_HISTORY表,是以SNAP_ID为分区键的范围分区表,每个SNAP_ID一个分区,每60分钟就新增一个 分区,难怪数据增长量这么大,所以生产环境启用AWR需要慎重考虑。
好在资源回收特别方便,关闭AWR,只需执行SP_INIT_AWR_SYS(0);会自动关闭AWR,并自动删除SYSAUX表空间,释放全部资源。
版本查询:
达梦数据库小版本查询方式稍显混乱,早期版本可以通过v$version查询,后来用着用着发现v$version查不到小版本了,需要通过v$instance才能查到
其他:
还有很多和Oracle不同的地方,比如保留字、参数管理、主备原理等,这里就不详细说明了。
崖山数据库:
YashanDB崖山数据库初步测试找到很多和Oracle相似的地方,包括表默认数据结构、系统表空间名称、动态性能视图名称等,那么崖山数据库是否是最像Oracle的国产数据库呢,仅通过官方技术文档很难全方位的了解到很多技术细节,没有详细的官方文档,通过自己理解去做测试也是杯水车薪。
技术文档
通常DBA想了解一个新的数据库产品,都会先从官方技术文档入手,如果技术文档不完善甚至漏洞百出,会直接劝退一大部分人员,给技术人员留下不好的印象。
目前来看,崖山的技术文档稍显单薄,至少和达梦数据库相比还有较大差距,更不用说Oracle数据库了,当然崖山数据库也是处于起步阶段,相信后期会逐步完善。
但仍然比某些国产数据库强很多,甚至有很多国产数据库技术文档设置各种限制,不能随意浏览和下载,甚至有的压根没有统一的官方技术文档,可能是由于短期内维护技术文档回报率太低了吧。
支持的架构
崖山数据库支持单机、主备、共享集群、分布式架构。
个人认为这是最全的架构,达梦数据库也支持这些架构,但达梦的分布式架构主要面向的是OLAP场景。不同的架构适用不同的场景,比如测试环境可以使用单机,实例或数据库级别高可用需求可以选择共享集群或主备,高并发、大数据量可以选择分布式架构,双中心或三中心需求又可以使用多种架构的组合方式。
目前来看,很多国产数据库仅支持这些架构中的一种或几种,比如有的只支持分布式架构,对外声称可以支撑多少PB的数据量,支持大几千节点等,动不动就需要全闪高端存储、几百GB内存的要求,这对一些小型企业特别不友好,就算大公司的低负载业务也不是全希望使用如此繁重的数据库架构。
虚谷数据库:
虚谷数据库支持单机、主备、分布式集群,不支持共享集群。
官方技术文档链接如下:
https://www.xugudb.com/%e6%96%87%e6%a1%a3%e4%b8%ad%e5%bf%83
之前在ITPUB和微信公众号发布过一篇虚谷数据库的简单测试文章,链接如下:
http://blog.itpub.net/29785807/viewspace-2919422/
从数据库登录界面可以看到,和Oracle比较类似。
数据字典名称还是有明显差别。
从数据库和实例架构来看,更像MySQL。
数据库对比
下面针对Oracle、达梦数据库、崖山数据库进行简单对比,后期有时间在进行深入研究。
类型 | Oracle | 达梦 | 崖山 |
表默认数据结构 | 堆组织表 | 索引组织表 | 堆组织表 |
实例 | v$instance.status | v$instance.status$ | v$instance.status |
会话 | v$session | v$sessions | v$session |
日志 | V$log | V$rlog | V$log |
日志文件 | V$logfile | V$rlogfile | V$logfile |
控制文件 | V$controlfile | v$dm_ini.para_name like 'CTL%' | V$controlfile |
数据文件大小 | 支持KB,MB,GB等 | 默认MB,不支持写单位 | 支持MB,GB等 |
回滚 | UNDO | ROLL | UNDO |
查询参数 | Show parameter V$parameter 等 | V$dm_ini V$parameter | Show parameter V$parameter 等 |
调整参数 | alter system set | sp_set_para_value | alter system set |
查询版本 | V$version | V$version V$instance | V$version |
内存管理 | ASMM,AMM | 手动 | |
角色 | 有connect角色 | 无connect角色 | 有connect角色 |
支持架构 | 单机、主备、共享集群、分布式集群 | 单机、主备、共享集群、分布式集群 | 单机、主备、共享集群、分布式集群 |
技术文档 | 最完善 | 较完善 | 较差 |
崖山数据库测试
企业介绍
深圳计算科学研究院(Shenzhen Institute of Computing Sciences,SICS,简称深算院)是深圳市人民政府建设的“十大基础研究机构”之一,以建设世界一流的计算基础科学研究机构为目标,重点研究以大数据为代表的计算科学基础理论,致力打造原创基础软件品牌,建设中国的“贝尔实验室”
发展历程
https://www.yashandb.com/company
2013~2018 原创理论体系证明和奠基
首创提出大数据计算复杂性理论,奠定大数据查询复杂性基础。
原创理论体系,奠定理论基础,A类论文60+。
有界计算、增量计算、近似计算、并行计算、大数据质量、跨模融合、关联分析、逻辑+A1、大数据计算复杂性理论。
数据库顶会最佳论文大满贯,十年时间检验奖。
2019 深算院正式运营
深算院正式运营,开启有界计算理论工程化。
汇聚了一批全球知名学府的青年科学家以及具有多年名企研发经验的资深工程师。
产品亮相CNCC,DeepTech专访报道,实现理论落地系统可行性初步验证。
2020~2021 原型验证,产品和工程落地
分布式分析原型开发完成可行性验证。
YashanDB完成一阶段原创理论、核心技术、自研系统,具备核心系统替换能力。
2022 权威测试认证,市场化元年
国产主流处理器、服务器、OS、中间件兼容认证。
第五届数字中国建设峰会“十大硬核科技”奖。
工信部下属机构权威测试,内核代码自主率100%。
信通院可信数据库集中事务型/分布式分析型评测。
30+客户,覆盖金融、政府、能源、交通、央企等多行业。
高端共享集群原型开发完成可行性验证。
2023~至今 市场复制,高端替代
金融、运营商、政府、能源等行业渗透和规模复制。
高端共享集群发布,分布式市场商用。
V22.2正式发布,功能、性能、稳定性等全面加强。
与中国工业互联网研究院签署战略合作协议。
崖山科技通过CMMI3级认证。
YashanDB通过等保3级认证。
与中地数码联合发布空间数据存储管理解决方案。
首次亮相可信数据库发展大会,上榜《中国数据库产业图谱》、参编《数据库发展研究报告》。
数据库应用创新实验室电信行业工作组首批共建单位。
安装
下载
https://download.yashandb.com/download
上传到测试服务器
[root@cjc-db-02 yashan]# ls -lrth yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 168M Nov 21 17:26 yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
[root@cjc-db-02 yashan]# md5sum yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
bfb96d7c63cf8e1db1b995d5bcdedfb6 yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
创建用户
useradd -d /home/yashan -m yashan
passwd yashan
添加用户环境变量
[yashan@cjc-db-02 ~]$ vi .bash_profile
......
export PATH=$PATH:/home/yashan/install/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yashan/install/lib
创建目录
cd /
mkdir data
cd data
mkdir yashan
chmod -R 777 /data/yashan
解压安装介质
su - yashan
mkdir /home/yashan/install
cd /home/yashan/install
tar -zxvf /soft/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -C /home/yashan/install/
命令行安装
Step1:生成部署文件
执行yasboot package命令生成配置文件,命令详细参数可查阅yasboot。
其中,
--cluster指定为要部署的数据库集群名称,该名称也将作为集群中所有节点上初始创建数据库的名称(database name),
--port指定SSH服务端口,
--install-path指定数据库安装路径,
--data-path指定数据存放目录,
--begin-port指定数据库监听端口。
cd /home/yashan/install/
./bin/yasboot package se gen --cluster yashandb -u yashan -p password --ip 172.16.11.138 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688
上一步骤执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,
yashandb.toml为数据库集群的配置文件,hosts.toml为主机的配置文件,可手动修改,
但不建议删除文件中任何行,否则可能导致后续安装过程报错,或者所搭建的环境后续无法进行扩展配置。
[yashan@cjc-db-02 install]$ ls -lrth *.toml
-rw------- 1 yashan yashan 494 Nov 21 17:40 hosts.toml
-rw------- 1 yashan yashan 725 Nov 21 17:40 yashandb.toml
依据企业实际需要调整yashandb.toml配置文件中的安装参数。其中,可在group级别设置YashanDB的所有建库参数,在node级别设置YashanDB的所有配置参数。
vi yashandb.toml
Step2:执行安装
[yashan@cjc-db-02 install]$ ./bin/yasboot package install -t hosts.toml -i /soft/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
172.16.11.138
ip:172.16.11.138 memroy is less than 4096MB
config check failed
调大虚拟机内存
[yashan@cjc-db-02 install]$ ./bin/yasboot package install -t hosts.toml -i /soft/yashan/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
checking install package...
install version: yashandb 23.1.1.100
cjc-db-02 100% [====================================================================] 9s
update host to yasom...
Step3:数据库部署
执行部署命令。
./bin/yasboot cluster deploy -t yashandb.toml
type | uuid | name | hostid | index | status | return_code | progress | cost
------------------------------------------------------------------------------------------------------------
task | 0973c24a9fa05c4b | DeployYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 154
------+------------------+--------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
生效环境变量
(此步骤需以yashan用户登录到每个节点上执行)。
#部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件
$ cd /data/yashan/yasdb_home/yashandb/23.1.0.2/conf
# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除
[yashan@cjc-db-02 ~]$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
[ -f /home/yashan/.yasboot/yasboot.completion.bash ] && source /home/yashan/.yasboot/yasboot.completion.bash
$ cat yashandb.bashrc >> ~/.bashrc
$ source ~/.bashrc
Step4: 修改sys用户口令
YashanDB不提供系统初始口令,请通过yasboot工具设置集群内所有节点sys用户的密码。
$ ./bin/yasboot cluster password set -n Cjc.12345 -c yashandb
特殊字符之前用的“!”,测试无法正常登陆,报错如下:
YAS-06017 failed to get environment YASDB_DATA
YASQL-00007 unable to CONNECT to Server after 1 attempts
将特殊字符更改为“.”,可以正常登陆。
也可以通过yaspwd命令修改sys口令。
[yashan@cjc-db-02 ~]$ cd /data/yashan/yasdb_data/db-1-1/instance/
[yashan@cjc-db-02 instance]$ ls
yasdb.ipc yasdb.pid yasdb.pwd
[yashan@cjc-db-02 instance]$ mv yasdb.pwd yasdb.pwd.bak
[yashan@cjc-db-02 instance]$ yaspwd file=yasdb.pwd
Enter password for SYS:Cjc12345!
Step5:验证安装是否成功
执行查看数据库状态命令。
$ ./bin/yasboot cluster status -c yashandb -d
Step6:登陆
[yashan@cjc-db-02 instance]$ yasboot sql -d sys/Cjc.12345@172.16.11.138:1688
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL>
[yashan@cjc-db-02 instance]$ yasql sys/Cjc.12345@172.16.11.138:1688
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL>
SQL> create tablespace cjc datafile '/data/yashan/yasdb_data/db-1-1/dbfiles/cjc01' size 10M;
SQL> create user cjc identified by 1 default tablespace cjc;
SQL> grant connect to cjc;
SQL> grant resource to cjc;
SQL> conn cjc/1@172.16.11.138:1688
SQL> exit
exit
直接退出SQL窗口,而不是退回到sys用户。
有时间在深入研究吧。