百家争鸣下的 Vastbase G100:一次国产数据库体验与思考

文章目录

  • 前言
  • 一、部署环境
    • [1.1 安装包版本](#1.1 安装包版本)
    • [1.2 测试环境](#1.2 测试环境)
  • 二、清理旧版本环境
  • [三、安装 Vastbase G100 V3.0.9](#三、安装 Vastbase G100 V3.0.9)
    • [3.1 上传并解压安装包](#3.1 上传并解压安装包)
    • [3.2 切换安装用户](#3.2 切换安装用户)
    • [3.3 交互式安装选择](#3.3 交互式安装选择)
    • [3.4 安装完成后的环境变量](#3.4 安装完成后的环境变量)
  • 四、启动数据库
    • [4.1 启动服务](#4.1 启动服务)
    • [4.2 查看数据库状态](#4.2 查看数据库状态)
    • [4.3 查看监听端口](#4.3 查看监听端口)
  • 五、连接与功能测试
    • [5.1 使用 gsql 连接数据库](#5.1 使用 gsql 连接数据库)
    • [5.2 基础 SQL 测试](#5.2 基础 SQL 测试)
  • 六、新版本G100测试
    • [6.1 版本检查](#6.1 版本检查)
    • [6.2 测试向量类型和向量算子](#6.2 测试向量类型和向量算子)
      • 6.2.1查看向量类型
      • [6.2.2 创建向量表](#6.2.2 创建向量表)
      • [6.2.3 测试 L2 距离](#6.2.3 测试 L2 距离)
      • [6.2.4 测试 Cosine 距离和内积](#6.2.4 测试 Cosine 距离和内积)
      • [6.2.5 测试向量函数](#6.2.5 测试向量函数)
    • [6.3 测试向量索引 graph_index](#6.3 测试向量索引 graph_index)
      • [6.3.1 创建测试表](#6.3.1 创建测试表)
      • [6.3.2 插入 10000 条随机向量](#6.3.2 插入 10000 条随机向量)
      • [6.3.3 创建向量索引](#6.3.3 创建向量索引)
      • [6.3.4 验证是否走 ANN Index Scan](#6.3.4 验证是否走 ANN Index Scan)
    • [6.4 查看新版本支持的向量索引类型](#6.4 查看新版本支持的向量索引类型)
    • [6.5 测试 Oracle 兼容能力](#6.5 测试 Oracle 兼容能力)
      • [6.5.1 dual、sysdate、nvl、decode](#6.5.1 dual、sysdate、nvl、decode)
      • [6.5.2 测试 connect by 层级查询](#6.5.2 测试 connect by 层级查询)
      • [6.5.3 测试 Oracle 兼容视图](#6.5.3 测试 Oracle 兼容视图)
      • [6.5.4 DBMS 包测试](#6.5.4 DBMS 包测试)
    • [6.6 测试审计和缓存参数检查](#6.6 测试审计和缓存参数检查)
    • [6.7 测试总结](#6.7 测试总结)
  • 总结

前言

这两年,国产数据库赛道真是越来越热闹。有厂商强调兼容替代,有厂商主打分布式和云原生,也有厂商开始把数据库重新定义为 AI 时代的数据底座。两个月前我受小龙姐的邀请测试官网挂包的Vastbase G100时,我最关心的并不是它是不是国产数据库,而是它到底想解决什么问题,又凭什么在一众产品里占有一席之地。至于为什么是两个月前呢emmm因为两个月前测试的时候装错版本了,后来工作一直忙也没来得及测试,恰好这两天有时间把鸽了两个月数据库测一测

当我了解完Vastbase G100的第一感受是,它不像一款只想做平替的数据库,它更像一款想同时抓住传统核心业务 和 AI新场景的产品。 这种野心并不小而且也并不轻松,因为前者要求稳定、兼容、易运维,后者要求向量、检索、生态接入,而Vastbase G100的体系恰恰是在这两条线上同时展开。

官方文档地址:

text 复制代码
https://docs.vastdata.com.cn/zh_CN/VastbaseG100/V3.0.9/1

一、部署环境

1.1 安装包版本

本次使用的安装包为:

text 复制代码
Vastbase-G100-3.0_Build9_30156-Linux-x86_64-no_mot-202601221034.tar.gz

安装包校验结果:

bash 复制代码
sha256sum Vastbase-G100-3.0_Build9_30156-Linux-x86_64-no_mot-202601221034.tar.gz

1.2 测试环境

项目 配置
虚拟机 IP 192.168.10.128
操作系统 Oracle Linux Server 7.9
CPU 8 核
内存 约 15 GB
数据库版本 Vastbase G100 V3.0.9 Build 9
数据库用户 vastbase
安装目录 /home/vastbase/local/vastbase
数据目录 /home/vastbase/data/vastbase
默认端口 5432

二、清理旧版本环境

之前环境 中已经安装过 Vastbase,但是安装版本不正确,因此本次首先对旧版本进行清理。

环境配置参考:https://blog.csdn.net/qq_46302361/article/details/157068594

删除旧版本目录。

bash 复制代码
pkill -u vastbase -f 'gaussdb|vastbase|postgres|gs_ctl|vb_ctl' 2>/dev/null || true

rm -rf /home/vastbase/local/vastbase
rm -rf /home/vastbase/local/vastbase_17408
rm -rf /home/vastbase/data/vastbase
rm -rf /home/vastbase/.Vastbase
rm -rf /soft/vb

重新创建基础目录:

bash 复制代码
mkdir -p /home/vastbase/local
mkdir -p /home/vastbase/data

chown -R vastbase:vastbase /home/vastbase/local /home/vastbase/data
chmod 755 /home/vastbase/local /home/vastbase/data

清理完成后再次检查:

bash 复制代码
find /home/vastbase /soft -xdev \
  \( -iname '*17408*' -o -path '/soft/vb*' \) \
  -maxdepth 6 -print 2>/dev/null

三、安装 Vastbase G100 V3.0.9

3.1 上传并解压安装包

创建安装介质目录:

bash 复制代码
mkdir -p /soft/vastbase_g100_build9_30156
cd /soft/vastbase_g100_build9_30156

上传安装包后解压:

bash 复制代码
tar -xzf Vastbase-G100-3.0_Build9_30156-Linux-x86_64-no_mot-202601221034.tar.gz

解压后目录结构如下:

text 复制代码
vastbase-installer/
vastbase-installer/vastbase_installer
vastbase-installer/Vastbase-G100-3.0_Build9_30156-Linux-x86_64-no_mot.tar.gz
vastbase-installer/.checksum
vastbase-installer/locales/

3.2 切换安装用户

Vastbase 安装程序不能使用 root 用户直接运行,需要切换到数据库安装用户。

bash 复制代码
su - vastbase

进入安装器目录:

bash 复制代码
cd /soft/vastbase_g100_build9_30156/vastbase-installer

执行安装程序:

bash 复制代码
./vastbase_installer

3.3 交互式安装选择

安装过程中主要选择如下:

安装项 本次选择
是否实例化数据库 Y
安装类型 典型安装
初始化用户 vastbase
加密密钥 使用数据库初始化用户密码
软件安装目录 /home/vastbase/local/vastbase
数据目录 /home/vastbase/data/vastbase
兼容模式 默认 A
listen_addresses *
max_connections 500
shared_buffers 3930MB
max_process_memory 10455MB

安装过程中会生成三个默认管理员的初始密码:

text 复制代码
vbadmin
vbsso
vbaudit

这些密码建议安装完成后立即保存并修改,博客中不建议直接暴露。

3.4 安装完成后的环境变量

安装完成后,环境变量会写入:

text 复制代码
/home/vastbase/.Vastbase

关键内容如下:

bash 复制代码
export PGPORT=5432
export PGUSER=vastbase
export PGDATA=/home/vastbase/data/vastbase
export GAUSSHOME=/home/vastbase/local/vastbase
export PATH=/home/vastbase/local/vastbase/bin:$PATH
export OM_GAUSS_VERSION=3.0.9

.bashrc 中会自动引用:

bash 复制代码
source /home/vastbase/.Vastbase

确认安装目录:

bash 复制代码
ls -ld /home/vastbase/local/vastbase
readlink -f /home/vastbase/local/vastbase

确认版本:

bash 复制代码
gaussdb --version
gsql --version

四、启动数据库

4.1 启动服务

切换到 vastbase 用户后执行:

bash 复制代码
su - vastbase

gs_ctl start -D "$PGDATA" -l "$PGDATA/startup.log"

4.2 查看数据库状态

bash 复制代码
gs_ctl status -D "$PGDATA"

输出如下:

4.3 查看监听端口

bash 复制代码
ss -lntp | grep -E '5432|5433|vastbase'

五、连接与功能测试

5.1 使用 gsql 连接数据库

进入 vastbase 用户:

bash 复制代码
su - vastbase

连接默认数据库:

bash 复制代码
gsql -d vastbase -p 5432

查看版本:

bash 复制代码
select version();

5.2 基础 SQL 测试

执行以下 SQL,验证建表、插入和查询能力。

sql 复制代码
select current_database(), current_user;

drop table if exists codex_vastbase_smoke;

create table codex_vastbase_smoke(
    id int primary key,
    note varchar(64),
    created_at timestamp default now()
);

insert into codex_vastbase_smoke(id, note)
values
    (1, 'install smoke test'),
    (2, 'vastbase g100 build9');

select
    id,
    note,
    to_char(created_at, 'YYYY-MM-DD HH24:MI:SS') as created_at
from codex_vastbase_smoke
order by id;

六、新版本G100测试

6.1 版本检查

先再确认一下没有安装错

sql 复制代码
SELECT vb_version();

SHOW sql_compatibility;

6.2 测试向量类型和向量算子

6.2.1查看向量类型

bash 复制代码
SELECT typname
FROM pg_type
WHERE typname ILIKE '%vector%'
ORDER BY typname;

6.2.2 创建向量表

bash 复制代码
CREATE TABLE vector_basic_test (
    id   INT PRIMARY KEY,
    name TEXT,
    emb  floatvector(3)
);

INSERT INTO vector_basic_test VALUES
(1, 'apple',  '[1,0,0]'),
(2, 'banana', '[0,1,0]'),
(3, 'orange', '[1,1,0]'),
(4, 'car',    '[0,0,1]');

6.2.3 测试 L2 距离

预期:apple 距离最近。

bash 复制代码
SELECT
    id,
    name,
    emb <-> '[1,0,0]'::floatvector(3) AS l2_distance
FROM vector_basic_test
ORDER BY emb <-> '[1,0,0]'::floatvector(3);

6.2.4 测试 Cosine 距离和内积

bash 复制代码
SELECT
    id,
    name,
    emb <=> '[1,0,0]'::floatvector(3) AS cosine_distance,
    emb <#> '[1,0,0]'::floatvector(3) AS negative_inner_product
FROM vector_basic_test
ORDER BY emb <=> '[1,0,0]'::floatvector(3);

6.2.5 测试向量函数

6.3 测试向量索引 graph_index

6.3.1 创建测试表

bash 复制代码
CREATE TABLE vector_ann_test (
    id  INT PRIMARY KEY,
    emb floatvector(8)
);

6.3.2 插入 10000 条随机向量

bash 复制代码
INSERT INTO vector_ann_test
SELECT
    g,
    array_to_floatvector(
        ARRAY[
            random(), random(), random(), random(),
            random(), random(), random(), random()
        ],
        8
    )
FROM generate_series(1, 10000) AS g;

6.3.3 创建向量索引

bash 复制代码
CREATE INDEX vector_ann_graph_idx
ON vector_ann_test
USING graph_index (emb floatvector_l2_ops);

6.3.4 验证是否走 ANN Index Scan

bash 复制代码
SET enable_seqscan = off;

EXPLAIN ANALYZE
SELECT
    id,
    emb <-> '[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]'::floatvector(8) AS distance
FROM vector_ann_test
ORDER BY emb <-> '[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]'::floatvector(8)
LIMIT 5;

6.4 查看新版本支持的向量索引类型

bash 复制代码
SELECT
    am.amname,
    opc.opcname,
    t.typname
FROM pg_opclass opc
JOIN pg_am am ON am.oid = opc.opcmethod
JOIN pg_type t ON t.oid = opc.opcintype
WHERE t.typname ILIKE '%vector%'
   OR opc.opcname ILIKE '%vector%'
ORDER BY am.amname, opc.opcname;

6.5 测试 Oracle 兼容能力

6.5.1 dual、sysdate、nvl、decode

bash 复制代码
SELECT sysdate FROM dual;

SELECT nvl(NULL, 'fallback') AS nvl_test FROM dual;

SELECT decode(2, 1, 'one', 2, 'two', 'other') AS decode_test FROM dual;

SELECT to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') AS now_str FROM dual;

6.5.2 测试 connect by 层级查询

bash 复制代码
SELECT level
FROM dual
CONNECT BY level <= 5;

6.5.3 测试 Oracle 兼容视图

bash 复制代码
SELECT count(*) FROM all_arguments;

SELECT count(*) FROM dba_tab_cols;

6.5.4 DBMS 包测试

bash 复制代码
SELECT dbms_random.value(1, 10) FROM dual;

查看支持的 DBMS 包

bash 复制代码
SELECT nspname
FROM pg_namespace
WHERE nspname ILIKE 'dbms%'
ORDER BY nspname;

6.6 测试审计和缓存参数检查

bash 复制代码
SELECT name, setting
FROM pg_settings
WHERE name ILIKE '%audit%'
   OR name ILIKE '%cache%'
ORDER BY name;

6.7 测试总结

这次比较值得关注的是新版本的向量能力。测试中可以查询到 floatvector 类型,并且成功创建了 floatvector(3)floatvector(8) 字段。通过 <-><=><#> 等算子,可以分别完成 L2 距离、余弦距离和负内积计算;通过 floatvector_dimsfloatvector_norml2_distancecosine_distanceinner_product 等函数,也能完成向量维度、范数、距离和内积等基础运算。

在向量索引测试中,我插入了 10000 条 8 维随机向量数据,并使用 graph_index 创建了 floatvector_l2_ops 索引。后续通过 EXPLAIN ANALYZE 查看执行计划,可以看到查询走的是 ANN Index Scan using vector_ann_graph_idx,说明 Vastbase G100 V3.0 Build 9 不只是支持向量字段存储,而是已经提供了近似向量检索能力。对于语义搜索、相似度匹配、RAG 知识库这类 AI 场景,这个能力是比较实用的。

兼容性方面,Oracle 常见语法和函数的测试结果也比较顺利。dualsysdatenvldecodeto_char 都可以正常执行,connect by level <= 5 也能返回层级查询结果。同时,all_argumentsdba_tab_cols 这类 Oracle 兼容数据字典视图可以查询,dbms_random.value 能正常生成随机数,系统中也能看到 dbms_jobdbms_lobdbms_randomdbms_sessiondbms_utilitydbms_xplan 等多个 DBMS_* schema。对于有 Oracle 迁移或兼容需求的业务来说,这部分能力还是比较重要的。

最后查看审计和缓存参数时,可以看到 enable_auditaudit_directoryaudit_event_filterenable_global_result_cacheenable_global_syscachequery_cache_sizeresult_cache_modevb_result_cache_mode 等参数。虽然部分能力默认是关闭状态,例如 enable_audit=offenable_global_result_cache=off,但至少说明新版本在审计、缓存、结果缓存和计划缓存方面都预留了比较丰富的配置能力,后续如果做性能测试或生产环境验证,可以继续围绕这些参数展开。

总结

这次测试算是把两个月前"装错版本"的坑补上了。

整体体验下来,Vastbase G100 V3.0给我的感觉不是单纯做国产数据库替代,而是明显在向 AI 数据底座方向靠拢。传统关系型数据库该有的连接、建表、查询、兼容能力都在,同时又加入了向量类型、向量函数、ANN 索引和多种向量索引访问方法。对于既要承接传统业务,又想探索 AI 检索、知识库、语义匹配这类场景的用户来说,这个版本是值得继续深入测试的。

相关推荐
gf13211114 小时前
python_更新飞书多维表格的单项关联字段
数据库·python·飞书
染指11104 小时前
8.向量数据库-RAG基础2
大数据·数据库·人工智能·rag
随身数智备忘录4 小时前
从点检到全生命周期:设备管理体系能解决哪些场景痛点?一套设备管理体系的实战应用
java·网络·数据库
不太厉害的程序员4 小时前
Oracle使用工具PL/SQL Developer中的数据泵备份还原数据库
数据库·sql·oracle
三十六煩惱風4 小时前
2026-05/04~10技术问题处理
java·数据库·sql
丷丩4 小时前
Postgresql基础实践教程
数据库·postgresql
johnny2334 小时前
数据库客户端:Goose、DearSQL、Duckgres、Noir、QoreDB、Tome
数据库
阿坤带你走近大数据4 小时前
oracle数据迁移到starrocks的可落地的思路和方案
数据库·oracle
IvorySQL5 小时前
IvorySQL & PostgreSQL 国内镜像服务上线——更快拉取,更稳体验
数据库·postgresql