承认自己的普通,然后全力以赴地过好这普通的一生。
“普通”不是妥协,而是看清舞台的边界后,决定在自己的坐标里活出密度。就像一株野草不羡慕乔木,却把根扎得更深——平凡中专注,本身就是一种壮举。
摘要:大模型时代的RAG应用、语义搜索和以图搜图,正在推动数据库从"结构化存储"向"智能计算与记忆基座"演进。然而,多数方案仍停留在"关系库+向量库+搜索引擎"多套架构拼凑的阶段,数据同步、运维复杂度、跨系统查询成为难以逾越的门槛。达梦DM9将向量数据库能力深度融入内核,原生支持向量数据类型,内置HNSW、IVFFLAT、DISKANN三款主流向量索引,并与关系型、文档、空间数据实现一套内核统一存储。本文从向量索引引擎设计、多模态统一存储架构、混合检索与RAG多路召回三个维度,深度解析DM9如何用一个数据库解决AI应用的数据底座难题。
大模型应用的爆发,让向量数据库从"小众工具"变成了"基础设施标配"。RAG(检索增强生成)需要向量检索召回相关知识;智能客服需要语义理解而非关键词匹配;电商推荐需要以图搜图找到相似商品。
但企业在落地这些场景时,往往陷入一个尴尬的局面:
┌──────────┐ 同步 ┌──────────┐ 同步 ┌──────────┐
│ 关系型DB │ ─────► │ 向量数据库 │ ─────► │ 搜索引擎 │
│ (业务数据)│ │ (语义向量) │ │ (全文检索)│
└──────────┘ └──────────┘ └──────────┘
│ │ │
└───────────────────┴───────────────────┘
应用层自行拼装结果
这套架构的问题显而易见:
达梦DM9的破局思路是:把向量数据库、关系型数据库、文档数据库、空间数据库全部装进一个内核,让AI应用的数据底座回归简单。
DM9的向量数据库能力并非外挂插件,而是深度融入内核的原生能力:
| 能力维度 | DM9实现 | 业界常见方案 |
|---|---|---|
| 向量类型 | 原生向量数据类型 | 插件/扩展方式 |
| 向量索引 | HNSW/IVFFLAT/DISKANN内置 | 依赖第三方库 |
| 多模存储 | 关系+文档+空间+向量一套内核 | 多套系统并存 |
| 混合检索 | SQL原生支持关系+全文+向量联合查询 | 应用层拼装 |
| 计算卸载 | 向量距离计算/TopK裁剪下沉到存储侧 | 计算层完成 |
| AI接口 | MCP Server + OpenAPI双通路 | 各系统独立接口 |
核心突破:DM9的向量数据与关系型数据共享同一套事务引擎、同一套缓存体系、同一套存储层。这意味着向量操作天然具备ACID属性,无需担心"关系表已更新、向量索引未同步"的数据不一致问题。
向量检索的本质是高维空间中的最近邻搜索。假设有一个768维的BERT文本嵌入向量,在一个包含1亿条向量的集合中找出最相似的Top-10,如果采用暴力逐一比对(Brute Force),需要计算1亿次768维向量的距离,单次查询可能需要数分钟——完全无法支撑在线业务。
近似最近邻搜索(ANN, Approximate Nearest Neighbor)通过牺牲极少量精度(通常<5%)换取数量级的性能提升,将O(N)复杂度优化到O(log N)甚至更低。
HNSW(Hierarchical Navigable Small World,分层可导航小世界)是目前业界最主流的向量索引算法。它的核心思想是构建一个多层图结构:
第3层(顶层):稀疏连接,大跨度跳跃定位大致区域
●────●────●
第2层(中层):中等密度,缩小范围
●──●──●──●──●
第1层(底层):密集连接,精细搜索
●─●─●─●─●─●─●─●─●─●
搜索过程:从顶层随机入口点开始,在每一层贪婪地向距离查询向量最近的邻居移动,直到无法更近;然后以该位置为入口,下降到下一层继续搜索,直到最底层返回最终结果。
-- DM9创建HNSW向量索引
CREATE TABLE product_embeddings (
product_id INT PRIMARY KEY,
name VARCHAR(200),
category VARCHAR(50),
embedding VECTOR(768) -- 768维向量
);
-- 插入向量数据(由Embedding模型生成)
INSERT INTO product_embeddings VALUES (
1001, '智能手表Pro', '数码',
vector_from_text('[0.023, -0.156, 0.089, ..., 0.034]')
);
-- 创建HNSW索引
CREATE INDEX idx_product_hnsw ON product_embeddings
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
-- 语义相似度搜索:找出与"智能手表Pro"最相似的Top-5商品
SELECT product_id, name, cosine_distance(embedding, query_vec) AS similarity
FROM product_embeddings
WHERE category = '数码'
ORDER BY embedding <=> vector_from_text('[查询向量]')
LIMIT 5;
HNSW关键参数:
| 参数 | 含义 | 建议值 | 影响 |
|---|---|---|---|
| m | 每层最大连接数 | 16-32 | 越大精度越高,内存越大 |
| ef_construction | 构建时的搜索宽度 | 64-200 | 越大构建越慢,索引质量越高 |
| ef_search | 查询时的搜索宽度 | 40-200 | 越大召回率越高,查询越慢 |
IVFFLAT(Inverted File with Flat Compression)采用K-Means聚类将向量空间划分为多个簇(Cluster),查询时只搜索最接近的若干个簇,而非全量扫描。
算法流程:
-- 创建IVFFLAT索引(适合数据量大、内存敏感的场景)
CREATE INDEX idx_product_ivf ON product_embeddings
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100); -- 聚类中心数
-- 设置查询时扫描的簇数量(平衡速度和精度)
SET ivfflat.probes = 10;
适用场景对比:
| 索引类型 | 数据规模 | 查询延迟 | 内存占用 | 构建速度 | 最佳场景 |
|---|---|---|---|---|---|
| HNSW | <1亿 | 毫秒级 | 高 | 中等 | 实时推荐、在线搜索 |
| IVFFLAT | <1亿 | 10-30ms | 低 | 快 | 内存受限、批量查询 |
| DISKANN | >1亿 | 30-80ms | 极低 | 慢 | 超大规模、成本优先 |
DISKANN专为超大规模向量数据设计,将大部分图结构存储在SSD上,仅保留热数据在内存中。它通过精心设计的缓存策略和异步预取机制,在低成本硬件上实现高召回率检索。
-- 创建DISKANN索引(适合PB级向量存储)
CREATE INDEX idx_product_diskann ON product_embeddings
USING diskann (embedding vector_cosine_ops)
WITH (max_degree = 32, search_list_size = 100);
DM9的多模态统一存储是业界少有的"真统一"方案——关系型数据、文档数据、空间地理数据、向量数据并非通过联邦查询或外部表拼接,而是共享同一套存储引擎和事务管理器:
-- 同一张表同时存储结构化字段、JSON文档和空间坐标
CREATE TABLE smart_city_events (
event_id INT PRIMARY KEY,
event_type VARCHAR(50), -- 结构化:事件类型
description TEXT, -- 文本:事件描述
location GEOGRAPHY(POINT, 4326), -- 空间:GPS坐标
tags JSON, -- 文档:JSON标签
description_vec VECTOR(768) -- 向量:语义嵌入
);
-- 创建多模态联合索引
CREATE INDEX idx_geo ON smart_city_events USING gist(location);
CREATE INDEX idx_vec ON smart_city_events USING hnsw(description_vec);
CREATE INDEX idx_tags ON smart_city_events USING gin(tags);
统一存储的核心优势:
| 维度 | 多套系统方案 | DM9统一内核 |
|---|---|---|
| 事务一致性 | 最终一致,需额外同步 | ACID原生保证 |
| 查询延迟 | 跨网络多次调用 | 内存内完成 |
| 运维成本 | 3-4套系统独立运维 | 一套监控、一套备份 |
| 存储成本 | 数据冗余存储 | 单副本共享 |
| 开发复杂度 | 应用层拼装多源结果 | 一条SQL完成 |
DM9支持在单条SQL中同时执行结构化过滤、全文检索和向量相似度搜索,查询优化器会自动选择最优执行计划:
-- 场景:在"数码"品类中,找出名称包含"智能"且语义与"运动手表"最相似的Top-10商品
SELECT
p.product_id,
p.name,
p.price,
cosine_distance(p.embedding, v.query_vec) AS semantic_score,
ts_rank(to_tsvector(p.name), query_ts) AS text_score
FROM products p,
(SELECT vector_from_text('运动手表') AS query_vec) v,
plainto_tsquery('智能') AS query_ts
WHERE p.category = '数码' -- 结构化过滤
AND p.price BETWEEN 500 AND 3000 -- 范围过滤
AND p.name @@ query_ts -- 全文检索
ORDER BY
(0.6 * (1 - cosine_distance(p.embedding, v.query_vec))
+ 0.4 * ts_rank(to_tsvector(p.name), query_ts)) DESC
LIMIT 10;
查询优化器决策过程:
category = '数码' AND price BETWEEN 500 AND 3000的B+树索引过滤掉90%数据这种"先过滤后检索"的策略,相比在全量数据上执行向量搜索,性能提升可达数十倍。
RAG(Retrieval-Augmented Generation)是大模型应用的核心范式,其核心流程为:用户提问→检索相关知识→将知识注入Prompt→大模型生成回答。
DM9在RAG链路中承担"知识检索引擎"的角色,且相比传统方案有明显优势:
传统RAG架构:
用户提问 → Embedding模型 → 向量库检索 → 关系库查元数据 → 合并结果 → LLM
DM9 RAG架构:
用户提问 → Embedding模型 → DM9混合检索(向量+关系+全文) → LLM
单次查询即可完成:传统方案需要两次数据库调用(向量库查语义+关系库查属性),DM9在单次SQL中完成混合检索,延迟降低50%以上。
DM9支持三种召回路径的灵活组合:
| 召回路径 | 技术实现 | 适用场景 |
|---|---|---|
| 精确召回 | B+树索引 + WHERE条件 | 时间范围、分类、价格等结构化过滤 |
| 关键词召回 | GIN全文索引 + tsquery | 产品名称、文档标题等文本匹配 |
| 语义召回 | HNSW向量索引 + 余弦距离 | 同义词、语义相近、以图搜图 |
-- RAG多路召回示例:企业知识库
WITH
-- 路径1:精确召回(最近7天的文档)
exact_recall AS (
SELECT doc_id, title, content, 1.0 AS recall_weight
FROM knowledge_base
WHERE create_time >= CURRENT_DATE - 7
AND doc_type = '技术规范'
),
-- 路径2:关键词召回(标题含"数据库"或"容灾")
keyword_recall AS (
SELECT doc_id, title, content, 0.8 AS recall_weight
FROM knowledge_base
WHERE to_tsvector(title) @@ plainto_tsquery('数据库 | 容灾')
),
-- 路径3:语义召回(与查询语义最相近的Top-20)
semantic_recall AS (
SELECT doc_id, title, content,
(1 - cosine_distance(embedding, query_vec)) * 0.9 AS recall_weight
FROM knowledge_base,
(SELECT vector_from_text(:query_text) AS query_vec) v
ORDER BY embedding <=> query_vec
LIMIT 20
)
-- 合并三路召回结果,去重并按融合权重排序
SELECT DISTINCT doc_id, title, content,
MAX(recall_weight) AS fusion_score
FROM (
SELECT * FROM exact_recall
UNION ALL
SELECT * FROM keyword_recall
UNION ALL
SELECT * FROM semantic_recall
) combined
GROUP BY doc_id, title, content
ORDER BY fusion_score DESC
LIMIT 10;
DM9将计算卸载技术延伸至AI场景,向量距离计算、索引扫描、本地TopK裁剪全部在存储侧完成:
传统架构: DM9计算卸载架构:
┌──────────┐ ┌──────────┐
│ 计算节点 │ 读取全部向量数据 │ 计算节点 │ 发送查询向量
│ 距离计算 │◄────────────────── │ 接收结果 │◄─────────────
└──────────┘ └──────────┘
▲ ▲
│ 网络传输海量向量 │ 仅传输TopK结果
▼ ▼
┌──────────┐ ┌──────────┐
│ 存储节点 │ 被动响应读请求 │ 存储节点 │ 本地执行距离计算
│ 仅存数据 │ │ TopK裁剪 │ 仅返回最终结果
└──────────┘ └──────────┘
性能数据:在达梦数据库一体机的实测中,基于DM9原生向量数据的AI计算卸载性能可提升30倍。
计算卸载对上层SQL完全透明,应用无需感知:
-- 这条SQL在DM9内核中自动触发向量计算卸载
SELECT product_id, name, cosine_distance(embedding, query_vec)
FROM product_embeddings
ORDER BY embedding <=> query_vec
LIMIT 100;
-- 执行计划显示计算卸载已生效
EXPLAIN ANALYZE
SELECT * FROM product_embeddings
ORDER BY embedding <=> vector_from_text('智能手表')
LIMIT 10;
-- 输出关键信息:
-- Vector Index Scan using idx_product_hnsw
-- Compute Offload: enabled (storage-side distance calculation)
-- Rows Removed by Offload: 9,999,990 / 10,000,000
DM9提供MCP(Model Context Protocol)Server与OpenAPI双通路接口,使AI Agent操作数据库如同调用普通工具一样便捷:
// MCP Server 暴露的数据库能力
{
"tools": [
{
"name": "dm9_vector_search",
"description": "在DM9中执行向量语义检索",
"parameters": {
"table": "product_embeddings",
"query_text": "运动手表",
"top_k": 10,
"filters": {"category": "数码", "price_min": 500}
}
},
{
"name": "dm9_hybrid_search",
"description": "执行关系+全文+向量混合检索",
"parameters": {
"sql": "SELECT ... ORDER BY fusion_score DESC LIMIT 10"
}
}
]
}
关键特性:
DM9内置两大AI Agent,降低开发和使用门槛:
设计智能体:
运维智能体:
-- 步骤1:创建多模态知识库表
CREATE TABLE enterprise_kb (
doc_id SERIAL PRIMARY KEY,
title VARCHAR(500),
content TEXT,
author VARCHAR(100),
department VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
doc_type VARCHAR(30), -- 合同/规范/通知/...
tags JSON, -- {"priority": "high", "project": "AI"}
content_vec VECTOR(768) -- 文本语义嵌入
);
-- 步骤2:创建多模态联合索引
CREATE INDEX idx_kb_hnsw ON enterprise_kb
USING hnsw (content_vec vector_cosine_ops) WITH (m = 16);
CREATE INDEX idx_kb_fulltext ON enterprise_kb
USING gin(to_tsvector('chinese', content));
CREATE INDEX idx_kb_department ON enterprise_kb(department);
-- 步骤3:插入数据并自动生成向量(假设有Embedding函数)
INSERT INTO enterprise_kb (title, content, author, department, doc_type, content_vec)
VALUES (
'DM9多租户隔离技术规范',
'DM9采用内核级租户隔离机制,通过资源组实现CPU、内存、IO的精细化管控...',
'张三',
'架构部',
'技术规范',
dm9_embedding('DM9多租户隔离技术规范 ...')
);
-- 场景:架构部员工搜索"租户资源隔离"相关文档
WITH query_embedding AS (
SELECT dm9_embedding('租户资源隔离') AS vec
)
SELECT
doc_id,
title,
author,
LEFT(content, 200) AS content_preview,
(1 - cosine_distance(content_vec, q.vec)) AS semantic_score
FROM enterprise_kb, query_embedding q
WHERE department = '架构部'
AND to_tsvector('chinese', content) @@ plainto_tsquery('租户 | 隔离 | 资源')
ORDER BY content_vec <=> q.vec
LIMIT 5;
达梦DM9的向量数据库内核设计,解决了AI应用数据底座的三个核心痛点:
随着达梦Fusion AI计划的持续推进,DM9还将演进库内AI推理、xPU加速、数据分析智能体支撑等能力,实现"企业私有数据不出库即可完成大模型推理运算"的安全愿景。
对于正在建设RAG应用、智能搜索、推荐系统的技术团队而言,DM9提供了一条"从复杂到简单"的国产化路径——用一个数据库,解决所有数据问题。
作者注:本文基于达梦DM9公开技术资料、官方白皮书以及DTCC 2026演讲内容撰写,深入解析了DM9向量数据库内核的技术原理和实现机制。文中SQL示例基于DM9向量扩展语法,实际部署请参考官方最新文档。
标签:#达梦数据库 #达梦同行者征文 #DM9 #向量数据库 #RAG #多模态 #AI原生
欢迎 👍点赞✍评论⭐收藏,欢迎指正
文章
阅读量
获赞
