国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

OpenTeleDB 征文精選|我花了一天時(shí)間,拆了一下 OpenTeleDB 的 XStore,到底解決了 PG 的哪根老筋?

0
分享至

OpenTeleDB 數(shù)據(jù)庫(kù)線(xiàn)上征文活動(dòng)優(yōu)秀作品來(lái)襲!本篇為精選文章,分享實(shí)戰(zhàn)經(jīng)驗(yàn)與技術(shù)感悟,敬請(qǐng)閱讀。

這兩年數(shù)據(jù)庫(kù)圈有點(diǎn)像 3 年前的云原生圈:"分布式"、"新一代內(nèi)核"、"重構(gòu)存儲(chǔ)引擎" 這些詞突然又密集起來(lái)了。

前幾天刷群,看到有人轉(zhuǎn)了 OpenTeleDB 的開(kāi)源消息,說(shuō)是 "基于 PostgreSQL 的新一代內(nèi)核"。說(shuō)實(shí)話(huà),我第一反應(yīng)是:又一個(gè)魔改 PG?

但看到里面提到一個(gè)點(diǎn):原位更新 + Undo 引擎(XStore),我還是沒(méi)忍住下了源碼。 因?yàn)檫@恰好戳中我這些年被 PG 折磨得最狠的痛點(diǎn):

表膨脹、autovacuum 抽風(fēng)、性能像心電圖一樣忽高忽低。

所以這次我沒(méi)看 PPT,也沒(méi)看宣傳稿,直接跑到機(jī)器上拆了半天,想看看它究竟動(dòng)了 PG 的哪根 "老筋"。


一、先說(shuō)結(jié)論:XStore 不是快,而是 "穩(wěn)"


我裝的是 OpenTeleDB 的 17.6 內(nèi)核版。 創(chuàng)建方式很直觀:

SELECT relname, amname FROM pg_class c JOIN pg_am a ON c.relam = a.oid WHERE relname = 'test_xstore';


這一步其實(shí)就已經(jīng)很有意思了 ------ 它不是 fork 了一套新引擎,而是作為插件掛進(jìn)去的。 這個(gè)思路我很認(rèn)可:

  • 不綁死 PG 版本

  • 能跟著大版本升級(jí)

  • 出問(wèn)題可以隨時(shí)回退

像 Citus、openHalo 這些 "成功插件化路線(xiàn)" 的項(xiàng)目,本質(zhì)都是這個(gè)思路。



二、打開(kāi)數(shù)據(jù)目錄,我第一次意識(shí)到:它真不是換皮

$PGDATA 下面,多了一個(gè)非常顯眼的目錄:

drwx------2postgrespostgres4096Nov320:15undo

這就是 XStore 的核心: 它不是靠多版本鏈來(lái)維護(hù) MVCC,而是靠 Undo 日志回滾。

這點(diǎn)和 Oracle、MySQL InnoDB 的邏輯更像。

也正是它敢說(shuō) "原位更新" 的底氣來(lái)源。


三、插入測(cè)試:它不快,但很 "誠(chéng)實(shí)"

我用同樣的參數(shù),在同一臺(tái)機(jī)器上跑了兩組:

INSERTINTO test_xstore (name, value) SELECTmd5(random()::text), (random()*1000)::int FROM generate_series(1,10000000);

INSERTINTO test_heap (name, value) SELECTmd5(random()::text), (random()*1000)::int FROM generate_series(1,10000000);


結(jié)果是:


寫(xiě)慢了將近一倍。這點(diǎn)我反而覺(jué)得真實(shí):因?yàn)?XStore 在寫(xiě)數(shù)據(jù)頁(yè)的同時(shí),還要寫(xiě)一份 Undo。物理寫(xiě)入翻倍,吞吐下降是必然的。如果一個(gè)系統(tǒng)告訴你 "原位更新 + Undo 還更快",那我反而會(huì)不太信。


四、創(chuàng)新實(shí)驗(yàn):模擬 1 千萬(wàn)數(shù)據(jù)的存儲(chǔ)膨脹對(duì)比

我設(shè)計(jì)了一項(xiàng)創(chuàng)新實(shí)驗(yàn):在 1000 萬(wàn)條級(jí)別的大數(shù)據(jù)量下,評(píng)估 XStore 與 Heap 表在高頻更新下的空間膨脹、索引穩(wěn)定性以及查詢(xún)性能表現(xiàn)。該實(shí)驗(yàn)主要有兩個(gè)創(chuàng)新點(diǎn):

大規(guī)模數(shù)據(jù)模擬

  1. 使用 generate_series(1,10000000) 生成 1000 萬(wàn)條數(shù)據(jù),保證數(shù)據(jù)量級(jí)對(duì)存儲(chǔ)膨脹影響明顯。

  2. 初始數(shù)據(jù)包括 id、namevalueupdated_at 四列,與前期實(shí)驗(yàn)一致,但數(shù)據(jù)量增加十倍,以模擬真實(shí)大規(guī)模 OLTP 系統(tǒng)負(fù)載。

多維度空間分析

  1. 不僅監(jiān)控表總大小,還分別統(tǒng)計(jì)索引占用和 TOAST 表空間。

  2. 每輪更新后,通過(guò) pg_relation_sizepg_total_relation_sizepg_indexes_size 獲取精細(xì)化指標(biāo)。

  3. 引入 可視化趨勢(shì)分析,繪制表空間增長(zhǎng)曲線(xiàn),以直觀展示 XStore 與 Heap 的差異。



4.1 實(shí)驗(yàn)設(shè)計(jì)

表結(jié)構(gòu)

CREATETABLE xstore_large ( idSERIAL PRIMARY KEY, nameTEXT, valueINT,     updated_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP ) USING XSTORE; CREATETABLE heap_large ( idSERIAL PRIMARY KEY, nameTEXT, valueINT,     updated_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP );


初始化 1000 萬(wàn)條數(shù)據(jù)

INSERTINTO xstore_large (name, value) SELECT'name_' || g, g FROM generate_series(1, 10000000) AS g; INSERTINTO heap_large (name, value) SELECT'name_' || g, g FROM generate_series(1, 10000000) AS g;


先對(duì)現(xiàn)在存入 1000w 數(shù)據(jù)的空間監(jiān)控與記錄一下如下。


SELECT     pg_size_pretty(pg_total_relation_size('xstore_large')) AS xstore_total,     pg_size_pretty(pg_indexes_size('xstore_large')) AS xstore_index,     pg_size_pretty(pg_total_relation_size('heap_large')) AS heap_total,     pg_size_pretty(pg_indexes_size('heap_large')) AS heap_index;

 985 MB       | 388 MB       | 789 MB     | 214 MB

多輪全表更新

  • 連續(xù) 5 輪更新,每輪更新 valueupdated_at,模擬寫(xiě)入密集場(chǎng)景:

UPDATE xstore_large SETvalue = value + 1, updated_at = CURRENT_TIMESTAMP; UPDATE heap_large SETvalue = value + 1, updated_at = CURRENT_TIMESTAMP;


空間監(jiān)控與記錄

SELECT     pg_size_pretty(pg_total_relation_size('xstore_large')) AS xstore_total,     pg_size_pretty(pg_indexes_size('xstore_large')) AS xstore_index,     pg_size_pretty(pg_total_relation_size('heap_large')) AS heap_total,     pg_size_pretty(pg_indexes_size('heap_large')) AS heap_index;

第一輪:


 985 MB       | 388 MB       | 1578 MB    | 428 MB

第五輪:


 985 MB       | 388 MB       | 1628 MB    | 428 MB

4.2 千萬(wàn)數(shù)據(jù)更新膨脹可視化




五、實(shí)驗(yàn)結(jié)論

這組 1000 萬(wàn)級(jí)數(shù)據(jù) + 多輪全表更新的實(shí)驗(yàn),其實(shí)把 PG 傳統(tǒng) Heap 表的 "老問(wèn)題" 放大得非常清楚。

最核心的對(duì)比結(jié)果只有一句話(huà):

XStore 的空間是線(xiàn)性的、可預(yù)測(cè)的;Heap 表的空間是失控的、不可預(yù)測(cè)的。

具體來(lái)看:

  1. 表空間膨脹

a. Heap 表在第一次更新后,表體空間直接翻倍,從 789MB 飆到 1578MB。

b. 之后每一輪更新,雖然增長(zhǎng)幅度趨緩,但空間再也回不到初始狀態(tài)。

c. XStore 從頭到尾不變: 985MB → 985MB → 985MB

  1. 索引體積穩(wěn)定性

a. Heap 表索引從 214MB 膨脹到 428MB,且在后續(xù)更新中保持 "高位橫盤(pán)"。

b. XStore 的索引尺寸始終維持在 388MB 左右,沒(méi)有明顯漂移。

  1. 更新行為本質(zhì)差異

a. Heap:每一次 UPDATE,本質(zhì)都是 DELETE + INSERT → 老版本殘留 → 表膨脹 → 索引碎片 → autovacuum 壓力。

b. XStore:真正的原位更新 → 歷史版本進(jìn) Undo → 主表物理頁(yè)不變 → 無(wú)膨脹。

  1. 長(zhǎng)期可運(yùn)維性

a. 在 Heap 表上,如果你不 VACUUM,它一定會(huì)慢; 如果你 VACUUM,系統(tǒng)一定會(huì)抖。

b. 在 XStore 上,這兩件事都不再是必選項(xiàng)。

這意味著什么?

它不是讓你飛起來(lái),而是讓你不再塌方


六、我的心得

說(shuō)實(shí)話(huà),這幾年我已經(jīng)對(duì) "新一代數(shù)據(jù)庫(kù)內(nèi)核" 這類(lèi)說(shuō)法有點(diǎn)免疫了。大多數(shù)項(xiàng)目,要么是在 PG 上糊一層分布式殼; 要么就是換個(gè)名字,重新賣(mài)一遍 MVCC。而 XStore 給我的感覺(jué)不一樣。它沒(méi)有試圖掩蓋代價(jià)。寫(xiě)入更慢, IO 更多,架構(gòu)更復(fù)雜。

但它正面承認(rèn)了一個(gè)事實(shí):

PostgreSQL 的 MVCC,在高頻更新場(chǎng)景下已經(jīng)接近物理極限。

這不是參數(shù)調(diào)優(yōu)能解決的事,也不是加機(jī)器能扛住的事,而是存儲(chǔ)模型本身的問(wèn)題。這些年我見(jiàn)過(guò)太多系統(tǒng):白天 QPS 很穩(wěn),半夜 autovacuum 開(kāi)始清垃圾,延遲突然拉長(zhǎng),業(yè)務(wù)報(bào)警,DBA 開(kāi)始手工 VACUUM / REINDEX / CLUSTER,第二天繼續(xù)循環(huán)。

這不是運(yùn)維水平的問(wèn)題,而是模型在和現(xiàn)實(shí)硬扛。XStore 讓我第一次意識(shí)到:原來(lái) PG 也可以選擇不走這條老路。它沒(méi)有追求 "更快",而是選擇了一個(gè)更難、但更穩(wěn)的方向:

  • 用 Undo 換空間可控

  • 用寫(xiě)放大換性能平滑

  • 用工程復(fù)雜度換系統(tǒng)長(zhǎng)期可預(yù)期性

如果你是寫(xiě)多、更新密集型 OLTP 系統(tǒng),如果你被表膨脹、索引碎片、autovacuum 抽風(fēng)折磨過(guò),那你會(huì)和我一樣 --- 不一定立刻用它,但你會(huì)開(kāi)始認(rèn)真看它。這大概就是我這次拆源碼、跑實(shí)驗(yàn),最大的收獲。

作者:難忘兄

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
火箭隊(duì)阿門(mén)·湯普森在被湖人隊(duì)盧克·肯納德打爆后,承擔(dān)了責(zé)任

火箭隊(duì)阿門(mén)·湯普森在被湖人隊(duì)盧克·肯納德打爆后,承擔(dān)了責(zé)任

好火子
2026-04-20 03:31:40
蘇林坐火車(chē)回到河內(nèi),河內(nèi)火車(chē)站鋪了紅毯,迎接人員站一排

蘇林坐火車(chē)回到河內(nèi),河內(nèi)火車(chē)站鋪了紅毯,迎接人員站一排

星星會(huì)墜落
2026-04-19 17:08:00
48小時(shí)內(nèi),俄美伊都對(duì)中國(guó)提了一個(gè)要求,涉及中方主權(quán),必須滿(mǎn)足

48小時(shí)內(nèi),俄美伊都對(duì)中國(guó)提了一個(gè)要求,涉及中方主權(quán),必須滿(mǎn)足

安珈使者啊
2026-04-17 11:50:45
國(guó)家一級(jí)女演員陳麗云被逮捕!

國(guó)家一級(jí)女演員陳麗云被逮捕!

許三歲
2026-03-28 09:24:30
罕見(jiàn)!黃仁勛談芯片禁售突然情緒失控:你不是在和一個(gè)Loser說(shuō)話(huà)

罕見(jiàn)!黃仁勛談芯片禁售突然情緒失控:你不是在和一個(gè)Loser說(shuō)話(huà)

DeepAuto車(chē)探
2026-04-19 20:37:54
反轉(zhuǎn)來(lái)了,伊朗對(duì)印度油船開(kāi)炮,事態(tài)極為嚴(yán)重,特朗普或登機(jī)離國(guó)

反轉(zhuǎn)來(lái)了,伊朗對(duì)印度油船開(kāi)炮,事態(tài)極為嚴(yán)重,特朗普或登機(jī)離國(guó)

輝輝歷史記
2026-04-20 06:55:09
許家印大兒的加拿大生活:無(wú)錢(qián)但自由、每天抽中華、二弟前途未卜

許家印大兒的加拿大生活:無(wú)錢(qián)但自由、每天抽中華、二弟前途未卜

茶喝多了睡不著
2026-04-15 22:15:05
炒蒜苔時(shí),最忌直接下鍋炒,少了這1步,蒜苔不香,更不入味

炒蒜苔時(shí),最忌直接下鍋炒,少了這1步,蒜苔不香,更不入味

阿龍美食記
2026-04-16 20:21:17
泰國(guó)白龍王一生不敢去中國(guó),和弟子吐露:749局讓他心生畏懼

泰國(guó)白龍王一生不敢去中國(guó),和弟子吐露:749局讓他心生畏懼

宅家伍菇?jīng)?/span>
2025-02-05 17:44:30
他帶厚禮投靠紅軍,但征戰(zhàn)16年僅升半級(jí),授銜時(shí)讓羅榮桓犯了難

他帶厚禮投靠紅軍,但征戰(zhàn)16年僅升半級(jí),授銜時(shí)讓羅榮桓犯了難

云霄紀(jì)史觀
2026-04-16 01:07:06
最新 | 資深女演員去世!竟因這個(gè)病......

最新 | 資深女演員去世!竟因這個(gè)病......

天津廣播
2026-04-19 15:09:03
68歲趙本山海南逛街,打扮潮流很瀟灑,買(mǎi)幾袋奢侈品,生活好愜意

68歲趙本山海南逛街,打扮潮流很瀟灑,買(mǎi)幾袋奢侈品,生活好愜意

草莓解說(shuō)體育
2026-04-19 09:22:54
比賽進(jìn)行中,現(xiàn)場(chǎng)近2萬(wàn)人,觀眾突然喊話(huà):懂不懂人情世故?

比賽進(jìn)行中,現(xiàn)場(chǎng)近2萬(wàn)人,觀眾突然喊話(huà):懂不懂人情世故?

極目新聞
2026-04-19 10:17:37
馬克龍證實(shí):有法國(guó)士兵身亡

馬克龍證實(shí):有法國(guó)士兵身亡

魯中晨報(bào)
2026-04-18 21:24:20
勇士休賽期每一刀都疼,庫(kù)里不敢不簽,格林想給不起,未來(lái)不敢賭

勇士休賽期每一刀都疼,庫(kù)里不敢不簽,格林想給不起,未來(lái)不敢賭

老癘體育解說(shuō)
2026-04-20 07:52:56
10名美軍核心科學(xué)家接連死亡!特朗普:我剛開(kāi)完秘密會(huì)議

10名美軍核心科學(xué)家接連死亡!特朗普:我剛開(kāi)完秘密會(huì)議

青煙小先生
2026-04-20 10:09:53
外觀非常驚艷 全新一代寶馬6系有望回歸

外觀非常驚艷 全新一代寶馬6系有望回歸

車(chē)質(zhì)網(wǎng)
2026-04-20 10:06:04
雷軍挑戰(zhàn)成功!小米新SU7行駛1313公里只充1次電,連續(xù)直播15個(gè)小時(shí),多名車(chē)友一路跟隨

雷軍挑戰(zhàn)成功!小米新SU7行駛1313公里只充1次電,連續(xù)直播15個(gè)小時(shí),多名車(chē)友一路跟隨

極目新聞
2026-04-17 22:41:31
女大學(xué)生感覺(jué)多位男生喜歡自己,到處表白被拒確診桃花癲

女大學(xué)生感覺(jué)多位男生喜歡自己,到處表白被拒確診桃花癲

半島晨報(bào)
2026-04-19 20:41:49
劉雨鑫吃了6000家餐廳、走遍幾十個(gè)國(guó)家,他的錢(qián)其實(shí)就3個(gè)來(lái)源

劉雨鑫吃了6000家餐廳、走遍幾十個(gè)國(guó)家,他的錢(qián)其實(shí)就3個(gè)來(lái)源

老吳教育課堂
2026-04-14 07:44:56
2026-04-20 10:43:00
開(kāi)源中國(guó) incentive-icons
開(kāi)源中國(guó)
每天為開(kāi)發(fā)者推送最新技術(shù)資訊
7698文章數(shù) 34535關(guān)注度
往期回顧 全部

科技要聞

藍(lán)色起源一級(jí)火箭完美回收 客戶(hù)衛(wèi)星未入軌

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

頭條要聞

失蹤女老板被找到 嫌犯曾改名整容還催警察"還我清白"

體育要聞

七大獎(jiǎng)項(xiàng)候選官宣!文班或全票DPOY

娛樂(lè)要聞

章子怡!增重20斤素顏拍新片

財(cái)經(jīng)要聞

月之暗面IPO迷局

汽車(chē)要聞

外觀非常驚艷 全新一代寶馬6系有望回歸

態(tài)度原創(chuàng)

數(shù)碼
親子
手機(jī)
藝術(shù)
家居

數(shù)碼要聞

內(nèi)存短缺或致蘋(píng)果推遲上新 新款Mac Studio據(jù)稱(chēng)延遲數(shù)月發(fā)布

親子要聞

普通家庭養(yǎng)娃補(bǔ)鈣,90% 家長(zhǎng)都補(bǔ)錯(cuò)了!

手機(jī)要聞

上市還沒(méi)半年!三星三折疊屏手機(jī)面臨退市 友商跟華為差距太遠(yuǎn)

藝術(shù)要聞

王羲之《換鵝帖》尚在人間,驚艷無(wú)比!

家居要聞

法式線(xiàn)條 時(shí)光靜淌

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版