国产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ù)線上征文活動(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í)話,我第一反應(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à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é)果是:


寫慢了將近一倍。這點(diǎn)我反而覺(jué)得真實(shí):因?yàn)?XStore 在寫數(shù)據(jù)頁(yè)的同時(shí),還要寫一份 Undo。物理寫入翻倍,吞吐下降是必然的。如果一個(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)定性以及查詢性能表現(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_size、pg_total_relation_sizepg_indexes_size 獲取精細(xì)化指標(biāo)。

  3. 引入 可視化趨勢(shì)分析,繪制表空間增長(zhǎng)曲線,以直觀展示 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,模擬寫入密集場(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é)果只有一句話:

XStore 的空間是線性的、可預(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ù)更新中保持 "高位橫盤"。

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

  • 用寫放大換性能平滑

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

如果你是寫多、更新密集型 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)”用戶上傳并發(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)推薦
連魯迅都想不到,當(dāng)代網(wǎng)友為了省錢開(kāi)始說(shuō)文言文了。。

連魯迅都想不到,當(dāng)代網(wǎng)友為了省錢開(kāi)始說(shuō)文言文了。。

差評(píng)XPIN
2026-04-20 00:14:24
白天他是剿匪大隊(duì)長(zhǎng),晚上帶著土匪打伏擊,三次精準(zhǔn)襲擊解放軍

白天他是剿匪大隊(duì)長(zhǎng),晚上帶著土匪打伏擊,三次精準(zhǔn)襲擊解放軍

阿器談史
2026-04-19 15:53:09
為什么那么多酒店都倒閉了?網(wǎng)友:酒店很多需要被高鐵替代了

為什么那么多酒店都倒閉了?網(wǎng)友:酒店很多需要被高鐵替代了

另子維愛(ài)讀史
2026-04-12 13:01:06
哇塞,這大體格太完美了,誰(shuí)娶了她,定能旺三代

哇塞,這大體格太完美了,誰(shuí)娶了她,定能旺三代

東方不敗然多多
2026-04-19 18:01:19
李梓萌:2026年4月19號(hào)正式在《新聞聯(lián)播》復(fù)工,此前已缺席103天

李梓萌:2026年4月19號(hào)正式在《新聞聯(lián)播》復(fù)工,此前已缺席103天

曉今娛
2026-04-20 02:00:03
歐洲媒體哀嚎“一切結(jié)束了”,荷蘭掐斷光刻機(jī),坑的卻是自己人!

歐洲媒體哀嚎“一切結(jié)束了”,荷蘭掐斷光刻機(jī),坑的卻是自己人!

一家說(shuō)
2026-04-19 02:39:16
成本5億積壓7年,院線都沒(méi)上直接免費(fèi)網(wǎng)播,這電影就是個(gè)笑話!

成本5億積壓7年,院線都沒(méi)上直接免費(fèi)網(wǎng)播,這電影就是個(gè)笑話!

觀察鑒娛
2026-04-18 11:57:49
55歲鐘麗緹被指穿著不得體,太過(guò)暴露,直播中大膽跳操被說(shuō)不雅觀

55歲鐘麗緹被指穿著不得體,太過(guò)暴露,直播中大膽跳操被說(shuō)不雅觀

小椰的奶奶
2026-04-20 01:15:02
我國(guó)摧毀特大假酒網(wǎng)絡(luò):查獲近2萬(wàn)箱、涉案2.6億元,多在直播間銷售

我國(guó)摧毀特大假酒網(wǎng)絡(luò):查獲近2萬(wàn)箱、涉案2.6億元,多在直播間銷售

金融界
2026-04-19 14:16:10
G1輸球不可怕!可怕的是火箭主帥烏度卡賽后這番話,習(xí)慣性甩鍋!

G1輸球不可怕!可怕的是火箭主帥烏度卡賽后這番話,習(xí)慣性甩鍋!

田先生籃球
2026-04-19 15:17:44
山東贏8分!廣廈13分大勝!北京5分險(xiǎn)勝,排名大變,官宣重罰山西

山東贏8分!廣廈13分大勝!北京5分險(xiǎn)勝,排名大變,官宣重罰山西

老吳說(shuō)體育
2026-04-19 21:51:59
負(fù)債60億!年銷8.4萬(wàn)臺(tái)豪車的百億巨頭破產(chǎn),浙商大佬全被套牢

負(fù)債60億!年銷8.4萬(wàn)臺(tái)豪車的百億巨頭破產(chǎn),浙商大佬全被套牢

青眼財(cái)經(jīng)
2026-04-16 22:01:48
“我女兒敢這樣,腿給砸斷”,寶媽曬2個(gè)女兒出門,裝束讓人怒了

“我女兒敢這樣,腿給砸斷”,寶媽曬2個(gè)女兒出門,裝束讓人怒了

番外行
2026-04-15 10:13:21
為啥網(wǎng)上的東北人和現(xiàn)實(shí)中的差別很大?網(wǎng)友:好爽義氣嘴皮子賊溜

為啥網(wǎng)上的東北人和現(xiàn)實(shí)中的差別很大?網(wǎng)友:好爽義氣嘴皮子賊溜

帶你感受人間冷暖
2026-03-27 00:22:36
雷軍被堵車?yán)锞S權(quán)?小米徐潔云辟謠

雷軍被堵車?yán)锞S權(quán)?小米徐潔云辟謠

鞭牛士
2026-04-20 07:41:03
NBA年度最佳第六人最終候選:哈達(dá)威、哈克斯、凱爾登-約翰遜

NBA年度最佳第六人最終候選:哈達(dá)威、哈克斯、凱爾登-約翰遜

懂球帝
2026-04-20 06:45:04
二戰(zhàn)時(shí),德國(guó)為何送中國(guó)40萬(wàn)套裝備?要走了垂涎已久的三樣?xùn)|西

二戰(zhàn)時(shí),德國(guó)為何送中國(guó)40萬(wàn)套裝備?要走了垂涎已久的三樣?xùn)|西

抽象派大師
2026-04-03 14:30:57
囂張!拼多多竟把執(zhí)法人員手指夾骨折。網(wǎng)友調(diào)侃:“砍一刀”不是白叫的,15 億罰輕了

囂張!拼多多竟把執(zhí)法人員手指夾骨折。網(wǎng)友調(diào)侃:“砍一刀”不是白叫的,15 億罰輕了

新浪財(cái)經(jīng)
2026-04-20 07:43:33
局勢(shì)生變,全球接到消息,美軍全部撤離,所有軍事基地被敘國(guó)接管

局勢(shì)生變,全球接到消息,美軍全部撤離,所有軍事基地被敘國(guó)接管

聞識(shí)
2026-04-19 21:08:29
互聯(lián)網(wǎng)是有記憶的,她的黑歷史一大堆?。?>
    </a>
        <h3>
      <a href=互聯(lián)網(wǎng)是有記憶的,她的黑歷史一大堆??! BenSir本色說(shuō)
2026-04-15 22:38:07
2026-04-20 08:20:49
開(kāi)源中國(guó) incentive-icons
開(kāi)源中國(guó)
每天為開(kāi)發(fā)者推送最新技術(shù)資訊
7698文章數(shù) 34535關(guān)注度
往期回顧 全部

科技要聞

50分26秒破人類紀(jì)錄!300臺(tái)機(jī)器人狂飆半馬

頭條要聞

特朗普:美伊20日將舉行談判 再不接受協(xié)議就轟炸伊朗

頭條要聞

特朗普:美伊20日將舉行談判 再不接受協(xié)議就轟炸伊朗

體育要聞

湖人1比0火箭:老詹比烏度卡像教練

娛樂(lè)要聞

何潤(rùn)東漲粉百萬(wàn)!內(nèi)娛隔空掀桌第一人

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

華誼兄弟,8年虧光85億

汽車要聞

29分鐘大定破萬(wàn) 極氪8X為什么這么多人買?

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

游戲
本地
數(shù)碼
時(shí)尚
公開(kāi)課

PS必吃榜!5月陣容前瞻 007新游終于來(lái)了

本地新聞

12噸巧克力有難,全網(wǎng)化身超級(jí)偵探添亂

數(shù)碼要聞

榮耀手表4更新又跳票?官方回應(yīng)來(lái)了

裝修“精神角落”,就是這么上癮

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

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