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

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

MongoDB這套操作,1986年就有人寫好了說明書

0
分享至


1986年的論文,2025年的MongoDB。中間隔了39年,文檔數(shù)據(jù)庫的核心理論居然早就被人算透了。

這篇論文叫《非第一范式關(guān)系數(shù)據(jù)庫理論》,作者M(jìn)ark A. Roth。當(dāng)時關(guān)系數(shù)據(jù)庫剛統(tǒng)治世界,所有人都在追求第一范式(1NF)——把數(shù)據(jù)拆成扁平的二維表,消滅一切嵌套結(jié)構(gòu)。Roth卻反著來:嵌套怎么了?嵌套才是自然狀態(tài)。

MongoDB的工程師可能沒讀過這篇論文,但他們做出來的東西,幾乎就是論文的復(fù)刻。

10行變2行:1NF的冗余有多荒唐

Roth在論文里舉了個經(jīng)典例子。假設(shè)你要存員工信息:姓名、孩子、技能。按1NF的規(guī)矩,孩子和技能得拆成獨(dú)立表,或者拉成笛卡爾積的扁平表。

結(jié)果是10行數(shù)據(jù),Smith出現(xiàn)4次,Jones出現(xiàn)6次。孩子的信息重復(fù),技能的信息重復(fù),連員工名字都重復(fù)。更新的時候漏改一行?數(shù)據(jù)就臟了。

非第一范式(?1NF)直接把結(jié)構(gòu)嵌起來:2個文檔,完事。孩子是個數(shù)組,技能是個數(shù)組,技能下面的考試記錄還是個數(shù)組。三層嵌套,零冗余。

Roth把這種結(jié)構(gòu)叫"數(shù)據(jù)庫模式"(database scheme)——屬性可以是標(biāo)量(零階),也可以是關(guān)系值(高階)。聽起來像面向?qū)ο螅?986年還沒流行這詞。Roth的動機(jī)很純粹:省空間、省操作、符合直覺。

MongoDB的文檔模型,本質(zhì)上就是Roth的"數(shù)據(jù)庫模式"的工業(yè)實現(xiàn)。

$unwind、$group、$lookup:論文里的算子活了

Roth的論文不只是定義了數(shù)據(jù)結(jié)構(gòu),還設(shè)計了一套代數(shù)操作。嵌套關(guān)系怎么查詢?怎么聚合?怎么連接?他全寫好了。

MongoDB的聚合管道,幾乎一一對應(yīng):

$unwind——把嵌套數(shù)組展開成扁平流,對應(yīng)論文的"unnest"操作。$group——按字段聚合,對應(yīng)"nest"的逆過程。$lookup——跨集合連接,對應(yīng)嵌套關(guān)系的"join"。集合操作(并、交、差)——論文里也有專門的代數(shù)定義。

這不是巧合。2010年MongoDB發(fā)布聚合框架時,工程師面對的是和Roth相同的問題:怎么在嵌套結(jié)構(gòu)上跑關(guān)系代數(shù)?Roth的論文提供了現(xiàn)成的數(shù)學(xué)基礎(chǔ)。


一個細(xì)節(jié):Roth的論文里,嵌套關(guān)系的屬性可以是"關(guān)系值"(relation-valued),也就是屬性本身是個表。MongoDB的數(shù)組 of 文檔,正好對應(yīng)這個概念。數(shù)組不是事后補(bǔ)丁,是理論的一等公民。

為什么SQL繞了39年的彎路

1NF的暴政持續(xù)了幾十年。Oracle、MySQL、PostgreSQL,全都把嵌套結(jié)構(gòu)當(dāng)成異端。JSON字段是后來才加的,而且用起來像二等公民——不能索引、不能高效查詢、不能參與連接。

Roth早就指出了1NF的三個問題:冗余存儲、更新異常、查詢復(fù)雜。但SQL的慣性太大。標(biāo)準(zhǔn)委員會、企業(yè)客戶、遺留系統(tǒng),層層綁架。直到移動互聯(lián)網(wǎng)爆發(fā),數(shù)據(jù)模型越來越像JSON,文檔數(shù)據(jù)庫才殺回來。

MongoDB的成功常被說成"開發(fā)者體驗好"。但這句評價太輕了。它的底層是扎實的代數(shù)理論,只是包裝成了工程師喜歡的樣子。

論文里有個概念叫"V-relation"——值關(guān)系,允許屬性取空集。MongoDB的稀疏文檔、動態(tài)模式,正好對應(yīng)這個設(shè)計。不是MongoDB發(fā)明了靈活模式,是Roth證明了靈活模式在數(shù)學(xué)上自洽。

換句話說,MongoDB的"無模式"不是偷懶,是有理論背書的工程選擇。

4NF的替代方案:Roth的野心更大

原文標(biāo)題提到"替代4NF"。這值得展開。

數(shù)據(jù)庫范式從1NF跑到4NF,是為了消除各種異常:插入異常、刪除異常、更新異常。但每升一級范式,表就拆得越碎,查詢時連接越多。4NF要求消滅多值依賴,實踐中往往過度設(shè)計。

Roth的路線完全不同:不拆表,改數(shù)據(jù)結(jié)構(gòu)。用嵌套關(guān)系直接表達(dá)多值依賴,既保留范式化的好處,又避免連接的代價。

論文里的Figure 3-1,畫的是一個嵌套關(guān)系模式。把它和MongoDB的集合定義并排放,幾乎能逐行對應(yīng)。ename是標(biāo)量,Children是文檔數(shù)組,Skills是嵌套更深的數(shù)組。Exams嵌在Skills里,三層深度。

這種結(jié)構(gòu)在SQL里要拆四張表:employees、children、skills、exams。查詢一個員工的完整信息?四個JOIN。MongoDB呢?一個find,投影一下就行。

Roth在1986年就證明了:嵌套關(guān)系的表達(dá)能力不低于扁平關(guān)系,而且操作代價更優(yōu)。但工業(yè)界花了30年才跟上。


一個冷知識:對象數(shù)據(jù)庫為什么死了

90年代有過一陣對象數(shù)據(jù)庫熱潮,GemStone、ObjectStore、Versant,名字現(xiàn)在都沒人記得。它們也想解決嵌套數(shù)據(jù)的問題,但做法太激進(jìn):把內(nèi)存里的對象圖直接持久化,拋棄了關(guān)系代數(shù)。

結(jié)果是查詢語言一團(tuán)糟,優(yōu)化器做不出來,性能被SQL吊打。Roth的論文其實給過正確答案:保留關(guān)系代數(shù),擴(kuò)展它,而不是扔掉它。

MongoDB的聚合管道就是這條路線。$match、$project、$sort,全是關(guān)系操作。只是操作的對象從行變成了文檔,從標(biāo)量變成了嵌套結(jié)構(gòu)。

對象數(shù)據(jù)庫死了,文檔數(shù)據(jù)庫活了。區(qū)別不在于嵌套不嵌套,而在于有沒有扎實的代數(shù)基礎(chǔ)。Roth的論文提供了這個基礎(chǔ),MongoDB的工程師重新發(fā)現(xiàn)了它——或者至少,獨(dú)立 converged 到了同樣的設(shè)計。

有個細(xì)節(jié)挺有意思。Roth的論文引用了一篇1982年的日文論文,作者是K. Tanaka。那篇論文更早提出了非第一范式的想法,但用日語寫的,國際學(xué)術(shù)界沒注意到。Roth把它挖出來,用英文重寫,搭好了完整的理論框架。

學(xué)術(shù)圈的傳播延遲,和工業(yè)圈的采納延遲,疊加出了39年的時差。

現(xiàn)在的MongoDB工程師,有多少讀過Roth的論文?我猜不多。但聚合管道的每一個操作符,都在執(zhí)行論文里的數(shù)學(xué)定義。$unwind不是魔法,是unnest。$group不是黑科技,是aggregate with grouping。

這像是建筑工人沒讀過結(jié)構(gòu)力學(xué),但蓋的樓正好符合力學(xué)原理。工程直覺和數(shù)學(xué)理論,有時候會在終點(diǎn)相遇。

1986年的論文,現(xiàn)在還在arXiv上能下到。39頁,定義、定理、證明,標(biāo)準(zhǔn)的學(xué)術(shù)格式。最后一節(jié)是"Future Work",Roth列了幾個開放問題:遞歸查詢、完整性約束、分布式實現(xiàn)。

遞歸查詢后來有了$graphLookup。完整性約束MongoDB加了Schema Validation。分布式?那是另一個故事了,CAP定理的戰(zhàn)場。

Roth在2000年代初離開了學(xué)術(shù)界,去了工業(yè)界。他的LinkedIn停更在2015年。不知道他有沒有用過MongoDB,有沒有意識到自己的理論變成了幾十億市值產(chǎn)品的地基。

如果文檔數(shù)據(jù)庫早點(diǎn)流行,Roth的名字會不會像Codd一樣家喻戶曉?歷史沒有如果。但讀他的論文,你能感覺到一種錯位:正確的想法,生在了錯誤的時間。

現(xiàn)在MongoDB的文檔里,從來沒提過Roth。宣傳材料講"為開發(fā)者設(shè)計",講"靈活的數(shù)據(jù)模型",不講代數(shù)、不講范式、不講1986年的那篇論文。這也沒錯,工程師不需要知道理論來源,就像用哈希表不需要知道Knuth。

但知道來源之后,你看MongoDB的眼神會變。那些"自然而然"的設(shè)計選擇,原來都有出處。$unwind的命名有點(diǎn)怪?unnest更怪,但至少誠實。數(shù)組嵌套的限制、聚合管道的執(zhí)行順序、內(nèi)存使用的邊界條件——全能在論文里找到原型。

最后留個開放問題:如果你的數(shù)據(jù)天然是嵌套的,你會為了迎合SQL的范式,硬拆成十幾張表,還是直接用文檔模型,讓結(jié)構(gòu)跟著數(shù)據(jù)走?Roth在1986年投了后者一票,39年后,大多數(shù)新系統(tǒng)也這么選了。但銀行核心交易、財務(wù)總賬這些場景,SQL still rules。是場景真的不同,還是慣性還沒打破?

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(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)推薦
中方拒收道歉,日本自衛(wèi)官被轉(zhuǎn)移,小泉進(jìn)次郎24小時后發(fā)聲

中方拒收道歉,日本自衛(wèi)官被轉(zhuǎn)移,小泉進(jìn)次郎24小時后發(fā)聲

究竟誰主沉浮
2026-03-27 02:50:14
職場新穿搭:西裝+絲襪,上半身正式、下半身時髦

職場新穿搭:西裝+絲襪,上半身正式、下半身時髦

章眽八卦
2026-03-23 14:31:33
東契奇43分7助攻湖人戰(zhàn)勝步行者,勒布朗23分9板9助里夫斯25分

東契奇43分7助攻湖人戰(zhàn)勝步行者,勒布朗23分9板9助里夫斯25分

湖人崛起
2026-03-26 09:32:48
上海風(fēng)向悄悄轉(zhuǎn)移,多年后這片區(qū)域要高攀不起了?城市在改寫規(guī)則

上海風(fēng)向悄悄轉(zhuǎn)移,多年后這片區(qū)域要高攀不起了?城市在改寫規(guī)則

芭比衣櫥
2026-03-26 14:03:10
日均接診1.5萬人次、手術(shù)500臺,廣東這家華南醫(yī)療航母火遍全省

日均接診1.5萬人次、手術(shù)500臺,廣東這家華南醫(yī)療航母火遍全省

健身狂人
2026-03-27 00:11:10
西方最擔(dān)心的事發(fā)生:美伊激戰(zhàn)成中國軍方的“超級實驗室”?

西方最擔(dān)心的事發(fā)生:美伊激戰(zhàn)成中國軍方的“超級實驗室”?

矚望云霄
2026-03-26 19:30:03
這輩子走不出牢門,尹錫悅報復(fù)李在明的手段,就只剩下折磨獄警了

這輩子走不出牢門,尹錫悅報復(fù)李在明的手段,就只剩下折磨獄警了

奧字侃劇
2026-03-26 11:07:34
你知道我在床上有多厲害嗎?

你知道我在床上有多厲害嗎?

果粉之家
2026-03-20 12:35:16
3-1奪冠!中國女乒29歲王牌復(fù)蘇:組最強(qiáng)豪陣劍指世乒賽

3-1奪冠!中國女乒29歲王牌復(fù)蘇:組最強(qiáng)豪陣劍指世乒賽

李喜林籃球絕殺
2026-03-26 20:29:48
炸屏跑圈!51歲林志玲跑馬拉松,生圖狀態(tài)封神,網(wǎng)友:滿50減30!

炸屏跑圈!51歲林志玲跑馬拉松,生圖狀態(tài)封神,網(wǎng)友:滿50減30!

馬拉松跑步健身
2026-03-26 22:09:16
國際“冰雪路況”:美式“駕駛”亂世界

國際“冰雪路況”:美式“駕駛”亂世界

烽火瞭望者
2026-03-26 06:27:08
又不缺土地,為什么全世界只有中國,在瘋狂地修建高層住宅?

又不缺土地,為什么全世界只有中國,在瘋狂地修建高層住宅?

張黿鹵說體育
2026-02-07 12:45:26
因媽媽姓氏太特殊,全家一致通過“隨母姓”,網(wǎng)友:是我也隨母姓

因媽媽姓氏太特殊,全家一致通過“隨母姓”,網(wǎng)友:是我也隨母姓

譚老師地理大課堂
2026-03-24 07:37:08
狂賺18億!比愛馬仕還狠的運(yùn)動奢侈品,正在掏空中產(chǎn)的錢包

狂賺18億!比愛馬仕還狠的運(yùn)動奢侈品,正在掏空中產(chǎn)的錢包

青眼財經(jīng)
2026-03-17 16:03:09
你知道嗎?性成癮的痛苦超乎想象,竟比毒癮還難戒!

你知道嗎?性成癮的痛苦超乎想象,竟比毒癮還難戒!

特約前排觀眾
2026-03-24 00:05:06
釋永信“開光”真相大白,過程不堪入目,易中天也有牽扯

釋永信“開光”真相大白,過程不堪入目,易中天也有牽扯

尋墨閣
2026-03-25 11:39:10
大快人心!央視通報南博事件,幕后黑手被揪,遠(yuǎn)不止倒賣這么簡單

大快人心!央視通報南博事件,幕后黑手被揪,遠(yuǎn)不止倒賣這么簡單

大魚簡科
2026-02-11 19:25:26
伊朗注意了,美軍可能聲東擊西!第82空降師實力有多強(qiáng)?

伊朗注意了,美軍可能聲東擊西!第82空降師實力有多強(qiáng)?

科普100克克
2026-03-27 01:06:44
男子晨跑途中突然倒地,汕頭大學(xué)退伍醫(yī)學(xué)生與深圳護(hù)士跪地?fù)尰亍包S金四分鐘”

男子晨跑途中突然倒地,汕頭大學(xué)退伍醫(yī)學(xué)生與深圳護(hù)士跪地?fù)尰亍包S金四分鐘”

極目新聞
2026-03-26 21:06:22
女排超級聯(lián)賽冠軍爭奪,江蘇對決上海,勝負(fù)幾幾開?

女排超級聯(lián)賽冠軍爭奪,江蘇對決上海,勝負(fù)幾幾開?

老高說體育
2026-03-26 11:08:44
2026-03-27 04:08:49
爬蟲飼養(yǎng)員
爬蟲飼養(yǎng)員
業(yè)余養(yǎng)了只叫“龍蝦”的AI爬蟲,主業(yè)是給互聯(lián)網(wǎng)打工。
181文章數(shù) 1關(guān)注度
往期回顧 全部

科技要聞

美團(tuán)發(fā)布外賣大戰(zhàn)后成績單:虧損超200億

頭條要聞

特朗普:伊朗允許10艘油輪通行霍爾木茲海峽

頭條要聞

特朗普:伊朗允許10艘油輪通行霍爾木茲海峽

體育要聞

申京努力了,然而杜蘭特啊

娛樂要聞

劉曉慶妹妹發(fā)聲!稱姐姐受身邊人挑撥

財經(jīng)要聞

油價"馴服"特朗普?一到100美元就TACO

汽車要聞

一汽奧迪A6L e-tron開啟預(yù)售 CLTC最大續(xù)航815km

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

教育
房產(chǎn)
本地
公開課
軍事航空

教育要聞

精準(zhǔn)研判,提質(zhì)增效丨我校召開2026屆畢業(yè)生就業(yè)工作研判會

房產(chǎn)要聞

突發(fā),三亞又有大批征遷補(bǔ)償方案出爐!

本地新聞

救命,這只醬板鴨已經(jīng)在我手機(jī)復(fù)仇了一萬遍

公開課

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

軍事要聞

擔(dān)心特朗普突然停戰(zhàn) 以總理下令48小時盡力摧毀伊設(shè)施

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