OpenGauss DataVec向量数据库部署指南:CentOS7云服务器+Docker方案

2025-12-16 17:24:58


🔧 1. 安装 Docker

1.1 安装依赖包

# 作为 root 用户执行
yum install -y yum-utils device-mapper-persistent-data lvm2

1.2 添加 Docker 仓库

# 添加官方 Docker 仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 或使用阿里云镜像(国内加速)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.3 安装 Docker 引擎

# 安装最新版本
yum install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务
systemctl start docker
systemctl enable docker

# 验证安装
docker --version
# 应该显示类似:Docker version 24.0.7, build afdd53b

1.4 配置 Docker 镜像加速(国内用户必需)

# 创建或编辑 daemon.json
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
EOF

# 重启 Docker 服务
systemctl daemon-reload
systemctl restart docker

🐳 2. 部署 openGauss DataVec 容器

2.1 拉取官方镜像

# 拉取 DataVec 镜像
docker pull opengauss/opengauss:6.0.0-rc1-davec

# 验证镜像
docker images | grep opengauss

2.2 创建数据目录(持久化存储)

# 创建数据目录
mkdir -p /opt/opengauss_vec/data
mkdir -p /opt/opengauss_vec/logs
chown -R 1000:0 /opt/opengauss_vec # openGauss 容器使用 UID 1000

2.3 启动 DataVec 容器

# 启动容器(推荐配置)
docker run -d \
  --name opengauss_vec \
  -p 5432:5432 \
  -e GS_PASSWORD=OpenGauss@123 \
  -e DATACHECK=false \
  -e MAX_PREPARED_TRANSACTIONS=1000 \
  -v /opt/opengauss_vec/data:/var/lib/opengauss \
  -v /opt/opengauss_vec/logs:/var/log/opengauss \
  --restart unless-stopped \
  opengauss/opengauss:6.0.0-rc1-davec

# 验证容器状态
docker ps -f name=opengauss_vec

2.4 等待初始化完成

# 查看日志,等待数据库启动完成
docker logs -f opengauss_vec

# 当看到类似以下日志时,表示启动成功:
# "database system is ready to accept connections"


🔍 3. 连接并测试 DataVec

3.1 进入容器执行 gsql

# 进入容器
docker exec -it opengauss_vec bash

# 切换到数据库用户
su - omm

# 连接数据库
gsql -d postgres -p 5432

3.2 验证 DataVec 功能

-- 检查 DataVec 扩展是否已启用
SELECT * FROM pg_extension WHERE extname = 'datavec';

-- 检查支持的向量类型
SELECT typname FROM pg_type WHERE typname LIKE 'vector%';

-- 创建测试数据库
CREATE DATABASE vec_test;
\c vec_test

-- 创建向量表
CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    embedding vector(3)
);

-- 插入测试数据
INSERT INTO items (name, embedding) VALUES
('item1', '[1,2,3]'),
('item2', '[4,5,6]'),
('item3', '[7,8,9]');

-- 执行相似度搜索(L2 距离)
SELECT
    id,
    name,
    embedding <-> '[1,2,4]' as l2_distance,
    embedding <=> '[1,2,4]' as cosine_distance
FROM items
ORDER BY l2_distance
LIMIT 2;

-- 创建向量索引
CREATE INDEX idx_items_embedding ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 3);

-- 带索引的查询
EXPLAIN ANALYZE
SELECT id, name, embedding <-> '[1,2,4]' as distance
FROM items
ORDER BY embedding <-> '[1,2,4]'
LIMIT 2;

3.3 退出容器

# 退出 gsql
\q

# 退出容器
exit
exit


🚀 4. 本地连接测试(从宿主机)

4.1 安装客户端工具

# 在宿主机安装 openGauss 客户端
yum install -y https://opengauss.obs.cn-south-1.myhuaweicloud.com/6.0.0-rc1/x86_openEuler/openGauss-6.0.0-RC1-client.tar.gz

4.2 连接 DataVec 容器

# 连接容器数据库
gsql -d postgres -U omm -h 127.0.0.1 -p 5432 -W OpenGauss@123

# 测试查询
SELECT version();
SELECT current_database();


📊 5. 高级测试脚本

5.1 创建大规模测试数据

-- 连接到 vec_test 数据库
\c vec_test

-- 创建大表
CREATE TABLE large_embeddings (
    id BIGSERIAL PRIMARY KEY,
    text_content TEXT,
    embedding vector(768),
    metadata JSONB,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入 10,000 条随机向量数据
INSERT INTO large_embeddings (text_content, embedding, metadata)
SELECT
    'document_' || i,
    ARRAY(
        SELECT random() FROM generate_series(1, 768)
    )::vector(768),
    jsonb_build_object(
        'category', CASE WHEN i % 3 = 0 THEN 'tech'
                        WHEN i % 3 = 1 THEN 'business'
                        ELSE 'other' END,
        'score', round((random() * 100)::numeric, 2)
    )
FROM generate_series(1, 10000) as i;

-- 创建 HNSW 索引(高性能)
CREATE INDEX idx_large_embeddings_hnsw ON large_embeddings
USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);

5.2 融合查询测试

-- 向量搜索 + 标量过滤
SELECT
    id,
    text_content,
    1 - (embedding <=> (SELECT embedding FROM large_embeddings WHERE id = 1)) as similarity,
    metadata->>'category' as category,
    (metadata->>'score')::float as score
FROM large_embeddings
WHERE metadata->>'category' = 'tech'
  AND (metadata->>'score')::float > 70
ORDER BY embedding <=> (SELECT embedding FROM large_embeddings WHERE id = 1)
LIMIT 10;


🛠️ 6. 常用容器管理命令

# 查看容器状态
docker ps -a

# 停止容器
docker stop opengauss_vec

# 启动容器
docker start opengauss_vec

# 重启容器
docker restart opengauss_vec

# 查看日志
docker logs -f --tail 100 opengauss_vec

# 进入容器执行命令
docker exec -it opengauss_vec bash

# 删除容器(谨慎使用)
docker stop opengauss_vec
docker rm opengauss_vec


💡 重要提示

  1. 端口冲突:如果宿主机已使用 5432 端口,修改映射端口:
-p 5433:5432 # 将容器 5432 映射到宿主机 5433
  1. 内存限制:DataVec 需要足够的内存,建议容器至少分配 4GB:
--memory=4g --memory-swap=4g
  1. 持久化存储/opt/opengauss_vec/data 目录包含所有数据库数据,备份此目录即可备份数据库。
  2. 生产环境配置
  3. 使用 --restart always 确保容器自动重启
  4. 配置适当的内存和 CPU 限制
  5. 设置监控和日志轮转
  6. 国内网络优化
  7. 使用阿里云/腾讯云等国内镜像加速
  8. 如果下载速度慢,可以考虑使用国内镜像仓库
  9. 配置代理:export http_proxy=http://your-proxy:port

通过 Docker 方式部署,你可以在几分钟内获得一个完整可用的 DataVec 向量数据库,无需手动配置复杂的扩展文件。这是目前最简单、最可靠的部署方式!

声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。