Apache Doris 4.0 把 AI 塞進(jìn)數(shù)據(jù)庫(kù)了!?

“哥,Doris 4.0 把 AI 塞進(jìn)數(shù)據(jù)庫(kù)了!”
凌晨一點(diǎn),DBA老周在群里甩出這句話,附帶一張截圖:一條 SQL 直接調(diào)通簡(jiǎn)歷篩選,把 30 萬(wàn)份數(shù)據(jù) 3 秒跑完。
我盯著屏幕,咖啡差點(diǎn)灑鍵盤——這年頭,連數(shù)據(jù)庫(kù)都開始搶 HR 的飯碗?
第二天一早,我溜進(jìn)公司實(shí)驗(yàn)室,把 4.0 Doris懟到測(cè)試集群。
產(chǎn)品經(jīng)理阿May跟進(jìn)來(lái),抱著電腦一臉愁容:“老板要‘千人千面’推薦,預(yù)算卻只給兩臺(tái)破機(jī)器,你讓 AI 喝西北風(fēng)?”
我沒接話,先把用戶行為表、商品文本表、圖像特征表一股腦倒進(jìn) Doris,順手建了個(gè)向量索引:
# 向量索引檢索函數(shù)介紹
l2_distance_approximate():
使用 HNSW 索引按 歐氏距離(L2) 近似計(jì)算相似度。數(shù)值越小越相似。
inner_product_approximate():
使用 HNSW 索引按 內(nèi)積(Inner Product) 近似計(jì)算相似度。數(shù)值越大越相似。
-- 1) 建表與索引
CREATETABLE doc_store (
idBIGINT,
title STRING,
tags ARRAY<STRING>,
embedding ARRAY<FLOAT> NOTNULL,
INDEX idx_vec (embedding) USING ANN PROPERTIES (
"index_type" = "hnsw",
"metric_type" = "l2_distance",
"dim" = "768",
"quantizer" = "flat"-- 可選:flat / sq8 / sq4
),
INDEX idx_title (title) USING INVERTED PROPERTIES ("parser" = "english")
)
DUPLICATEKEY(id)
DISTRIBUTEDBYHASH(id) BUCKETS 16
PROPERTIES("replication_num"="1");
-- 2) TopN 最近鄰(建議使用 PreparedStatement 傳入向量), 用真實(shí)向量替換下面的 ... 占位符
SELECTid, l2_distance_approximate(embedding, [...]) AS dist
FROM doc_store
ORDERBY dist ASC
LIMIT10;
-- 3) 帶過(guò)濾條件的 ANN(先過(guò)濾后TopN,保障召回), 用真實(shí)向量替換下面的 ... 占位符
SELECTid, title,
l2_distance_approximate(embedding, [...]) AS dist
FROM doc_store
WHERE title MATCH_ANY 'music' -- 使用倒排索引快速過(guò)濾
AND array_contains(tags, 'recommendation') -- 結(jié)構(gòu)化過(guò)濾
ORDERBY dist ASC
LIMIT5;
-- 4) 范圍查詢,, 用真實(shí)向量替換下面的 ... 占位符
SELECTCOUNT(*)
FROM doc_store
WHERE l2_distance_approximate(embedding, [...]) <= 0.35;維度 768,量化 sq8,壓測(cè)腳本一跑,QPS 飆到 1.2 萬(wàn),CPU 才啃了 42%。阿May的下巴差點(diǎn)脫臼:“這玩意兒是數(shù)據(jù)庫(kù)?不是隱藏版 GPU?”
更離譜的是 AI 函數(shù)(?? https://doris.apache.org/zh-CN/docs/dev/ai/ai-function-overview/)

我現(xiàn)場(chǎng)寫了一條:
SELECT item_id, AI_SUMMARIZE(description, 20) AS digest,
AI_CLASSIFY(title, ARRAY['3C', '美妝', '食品', '潮玩']) AS tag
FROM sku_dim
WHERE AI_FILTER(CONCAT('適合送禮嗎?', description)) = true
LIMIT 100;結(jié)果 8 秒返回,文案組直接薅走數(shù)據(jù),半小時(shí)后朋友圈廣告上線,轉(zhuǎn)化率比上周同期翻 1.7 倍。
阿May抱著我胳膊:“哥,咱把推薦團(tuán)隊(duì)裁了吧?”我翻個(gè)白眼——推薦團(tuán)隊(duì)沒裁,老板把買新服務(wù)器的申請(qǐng)單撕了,順手給 Doris 集群又加了兩節(jié)點(diǎn),說(shuō)是“花小錢辦大事的典范”。
故事還沒完。
周五晚高峰,數(shù)據(jù)倉(cāng)庫(kù)例行跑批,平時(shí)溫順的 ETL 任務(wù)突然暴走,內(nèi)存占用 98%,眼看就要 OOM。
我順手測(cè)試把 enable_spill 打開,exec_mem_limit 降到 8 G,讓任務(wù)滾去磁盤睡覺。半小時(shí)后,任務(wù)穩(wěn)穩(wěn)當(dāng)當(dāng)寫完 9 TB 數(shù)據(jù),磁盤只占了 120 G。
老板在群里發(fā)了個(gè)紅包:“誰(shuí)把集群從崩潰邊緣拉回來(lái)?”
我默默點(diǎn)開,52 塊,備注兩字——“ disk”。
到這,可能有人要問(wèn),Doris 4.0 到底變了啥?
我說(shuō)它學(xué)會(huì)了三招:
第一招,把向量索引做成“懶人模式”,高維數(shù)據(jù)不用倒騰到專用向量庫(kù),一條 SQL 完成“結(jié)構(gòu)化 + 非結(jié)構(gòu)化”混合召回,省得數(shù)據(jù)在系統(tǒng)之間旅游。
第二招,把大模型揉進(jìn)函數(shù)庫(kù),情感、摘要、翻譯、分類、提取、掩碼,一條龍服務(wù),分析師再也不用 Python 寫腳本,DBA 也能秒變“ prompt 工程師”。
第三招,給離線任務(wù)加安全氣囊,內(nèi)存不夠就落盤,磁盤價(jià)換時(shí)間,老板再也不擔(dān)心任務(wù)半夜暴斃。
這三招聽起來(lái)像開掛,背后卻是現(xiàn)實(shí)主義——預(yù)算不漲、人手不增、需求翻倍,只能靠數(shù)據(jù)庫(kù)自己進(jìn)化。
Doris 4.0 不是來(lái)炫技,它是來(lái)救場(chǎng)的:讓中小團(tuán)隊(duì)用得起向量檢索,讓分析師不寫 Python 也能玩大模型,讓凌晨三點(diǎn)的報(bào)警短信少一條是一條。
老板今天又在群里發(fā)靈魂拷問(wèn):“AI 時(shí)代,數(shù)據(jù)團(tuán)隊(duì)的價(jià)值到底在哪?”
我回了句:“價(jià)值在讓老板睡得著。”
屏幕那端沉默半分鐘,然后甩來(lái)一句:“下周給 Doris 集群再加四臺(tái)機(jī)器,別讓我半夜接電話。”
我笑著合上電腦,心想:數(shù)據(jù)庫(kù)都學(xué)會(huì)搶飯碗了,咱再不升級(jí),真要被它優(yōu)化掉了。
























