首頁 分類 排行榜 閱讀記錄 我的書架
第503章 資料庫

“你還亂抓不?”

陳雪茹拿著一根棍子,指著小何駿,一臉來氣。

小何駿靠牆站著,瑟瑟發抖,臉上淚痕未乾。

“媽媽,我不敢了!”

何雨柱在一旁勸:“算了,雪茹,駿駿不懂事,再說那個米,不是甚麼大事,彆氣壞了身子。我這就去撿乾淨,咱們今天就吃米。”

陳嬸一把把小何俊摟到懷裡:“哎喲,你看大過年的,俊俊都知道錯了,以後就改了!”

念青在一旁道:“駿駿浪費糧食不對!”

陳雪茹道:“你也不是好人,看見他往米缸裡丟沙子也不拉著,他不懂事,你也不懂事嗎?”

念青立馬閉嘴。

呂辰、婁曉娥和雨水樂呵呵的看著。

大年初三一早,小何駿就惹了大麻煩,不知從哪裡抓來一把沙子,就丟在了米缸裡。

把陳雪茹氣得不輕。

正操練著,諸葛彪急匆匆就來到了呂辰家裡。

看見家裡的情況一愣:“陳嬸兒,何科長,大家好!”

說完,從兜裡掏出三塊錢,一人一塊塞在唸青、何駿和小呂曉手裡。

“呂辰,你跟我走!”

“這麼急,去哪裡?”

“我這兩天思前想後,咱們還漏了一樣東西。”

呂辰疑惑:“甚麼?”

“儲存櫃!”

“儲存櫃?”

“對,這個分散式電路設計輔助系統,科研機是KJ-0,咱們熟,編輯機是咱們做的,顯示器也是,鍵盤也沒問題,通訊是咱們在設計,唯獨這個儲存櫃,咱們不知道。這可是系統的核心,要存標準單元庫的。你想想,萬一設計出來不可用,找誰說理去?”

呂辰點點頭:“那你的意思是?”

“咱們去找陳教授去!”

“現在?”

“對,現在!”

呂辰有點無語,不過想想也對,的確應該去問清楚,正好也順道給梁先生送個火腿。

和家裡交待一聲,推出三輪車,裝上一隻火腿,又拿了些蔬菜雞蛋。

一路頂幾冒雪,先來到清華園,往梁先生家送了火腿,這才來到燕園。

陳教授是北大數學系的,搞拓撲,在星河計劃理論組裡負責指令集設計和資料結構。

呂辰把車騎進陳教授家樓下,和諸葛彪提著蔬菜雞蛋上了樓。

敲門之後,陳師母開門出來。

“師母好,我們是來給教授拜年。”

二人把禮物遞過去,陳師母接過菜籃子,翻看下面的菠菜和蒜苗,驚訝道:“臘月裡還能見到這個?還帶著水珠呢!”

呂辰笑著說:“自家暖棚種的,不值甚麼。”

陳教授從書房走出來,摘下老花鏡,看見二人,樂了:“小呂、諸葛。來,坐坐坐。”

寒暄幾句,陳師母去廚房張羅。

屋裡安靜下來,只聽得見爐子上水壺咕嘟咕嘟的聲音。

陳教授端起茶杯,看著二人:“你們來得正好,標準單元庫的事,我讓研究生想了幾個方案,年後想找你們一起討論。”

呂辰接過茶杯:“教授,我們今天來,就是想請教這個事。我們積體電路實驗室是分散式系統的使用者,有些地方沒想明白。”

“你說。”

呂辰看了看諸葛彪。

諸葛彪會意,從兜裡掏出個小本子,翻開一頁。

“陳老師,我在琢磨一個事。標準單元庫有四百多個單元,每個單元有邏輯圖、版圖、模擬模型、測試向量。這些東西,現在都記在紙面上,手冊、圖紙、卡片。工程師畫圖的時候,翻手冊查引數,翻圖紙看佈局,翻卡片找測試資料。”

陳教授點點頭。

諸葛彪繼續說:“以後上分散式系統了,用計算機輔助設計。我就琢磨著,這些資料是要存在儲存櫃裡給計算機呼叫的。工程師坐在終端前面,敲幾個命令,就能查到某個單元的引數,就能調出它的版圖,就能跑模擬……”

陳教授放下茶杯:“的確是這樣,你遇到甚麼問題了?”

諸葛彪笑了笑:“問題就是——這些資料怎麼存?”

他從本子裡抽出一張紙,上面畫了一個簡單的增值表。

“您看,一個與非門單元,它的邏輯功能可以用真值表描述:輸入A、輸入B、輸出Y。四個組合,每個組合對應一個輸出。這個真值表,在紙面上很好寫,四行兩列。但存在計算機裡呢?怎麼表示?是存成一張表,還是存成一組數?怎麼讓計算機知道‘這是一個與非門’,而不是一個‘與門’或者‘或非門’?”

陳教授接過那張紙,看了一眼,笑了。

“你這個問題,問到了根子上。”

他站起來,走到書桌前,拿了一張大紙和一支鉛筆,坐回沙發上。

“你剛才說的真值表,在數學上是一個對映,從輸入組合的集合,對映到輸出值的集合。這個對映,可以用表來表示,也可以用邏輯表示式來表示。但你說得對,光存這個表不夠。計算機要知道‘這是一個與非門’,還要知道它的版圖在哪兒、模擬模型在哪兒、測試向量在哪兒。”

他在紙上畫了一個樹狀圖。

“你看,單元庫是一個‘根’,每個單元是一個‘分支’,每個單元的屬性是‘葉子’。這種結構,在數學上叫樹。計算機要存這些資料,就需要一種能表示‘樹’的資料結構。”

呂辰插了一句嘴:“陳老師,您這麼一說,我倒想起一個東西,圖書館。”

陳教授愣了一下:“圖書館?”

“對。”呂辰指著那個樹狀圖,“圖書館裡幾萬本書,是怎麼找到想要的那本的?先查卡片目錄,找到索書號,再去書架上找。卡片目錄就是索引,按書名查、按作者查、按分類查。書架就是存書的地方,索書號告訴你去哪個書架拿。”

陳教授眼睛亮了。

呂辰繼續說:“標準單元庫,不就是一個‘圖書館’嗎?每個單元是一本書,單元型號是索書號,功能分類是分類法。工程師要查一個與非門的引數,就像讀者要找一本拓撲學的書,先查索引,找到位置,再去取資料。”

陳教授哈哈大笑:“你這個比方,打得太準了!圖書館的分類法、索引、目錄,就是一套資料管理系統。幾百年前就有了,只不過管的是書,不是單元庫。”

他在紙上又畫了一個圖,這次是圖書館卡片目錄的示意圖。

“圖書館的卡片目錄,按書名排、按作者排、按分類排。標準單元庫,也應該有按型號查、按功能查、按引數查的索引。這就是資料結構裡的‘多級索引’,樹結構、雜湊表,都是為了讓計算機不用掃遍所有資料就能找到目標。”

諸葛彪聽明白了:“所以,單元庫的資料結構,不是一個簡單的存起來,是得像圖書館一樣,有分類、有索引、有目錄?”

“對。”陳教授說,“你這個問題,不是儲存問題,是資料結構問題。資料怎麼組織,決定了計算機怎麼訪問、怎麼查詢、怎麼修改。如果組織得不好,資料越多,越難用。”

陳教授靠在椅背上:“圖書館除了放書,還要管借書、還書、誰借了哪本書、甚麼時候還……”

“這就是資料之間的關係。書和讀者之間、讀者和借閱日期之間、書和書架位置之間,這些關係,比書本身還重要。標準單元庫,也是一樣。光把單元存進去不夠,還要管誰在用、誰在改、甚麼時候改的、新版本和舊版本甚麼關係。”

他拿起鉛筆:“怎麼存、怎麼查、怎麼管關係,合在一起,就叫資料庫。這不是我發明的詞,國外已經在搞了。IBM給阿波羅計劃做了一套系統,專門管資料。叫IMS,Information Management System。就是用來管大型專案的資料的。”

IMS,IBM為阿波羅計劃開發的,世界上第一個真正的資料庫管理系統。

陳教授居然知道這個。

“標準單元庫,四百多個單元,幾十個引數,還不斷在改、在加、在被不同的人用,這就是一個小型的IMS。需要一套資料管理系統,能存、能查、能改、能管版本、能管誰在用。”

他放下鉛筆,看著二人:“這個問題,比造一臺計算機還難。計算機是算數的,這個是管事的。算數有公式,管事沒有。得自己琢磨。”

諸葛彪低頭翻了翻本子:“教授,還有一個問題,跟這個連著。以後分散式系統搭起來了,好幾臺機器共用一個儲存櫃。在具體使用過程中,會出現A工程師在改一個與非門的版圖,B工程師同時在跑這個與非門的模擬。”

陳教授看著他。

諸葛彪繼續說:“A改了一半,B跑出來的結果是舊的還是新的?A改完了,B不知道;B跑完了,A還沒改完。最後誰的資料算數?”

陳教授皺起眉頭。他拿起鉛筆,在紙上畫了一個簡圖。

“你是說——併發控制?”

“我就是這個意思。”諸葛彪說,“多個使用者同時訪問同一份資料,怎麼保證每個人看到的是正確的、最新的?”

陳教授想了想:“銀行裡存錢取錢,兩個人同時操作一個賬戶,也會出問題。銀行的解決辦法是加鎖,一個人在改,別人只能看不能動。或者做日誌,誰最後改的算誰的。”

他在紙上寫了幾個字:鎖、日誌、版本。

“你說的情況更復雜。工程師不光是在改資料,還在跑計算。跑一個模擬可能要幾分鐘,這段時間裡別人能不能看?能不能改?如果允許別人看,看到的是中間狀態還是舊狀態?如果允許別人改,改完了模擬結果還算不算數?”

諸葛彪點頭:“就是這個意思。我就是擔心,系統設計的時候不考慮這些,到時候用起來全是麻煩。”

陳教授在紙上又寫了一個詞:事務。

“這個問題,國外也在研究。把一組操作打包成一個‘事務’,要麼全做完,要麼全不做。中間狀態別人看不到。做完了再告訴別人‘我改完了’。這就是‘強一致性’,任何時候,每個人看到的資料都是一致的,不會出現‘A看到新的、B看到舊的’這種亂子。”

呂辰心裡一動,陳教授連“強一致性”這種詞都整出來了,這可是後世的規則。

陳教授繼續說:“這個問題,年後我讓研究生專門查資料。你們做工程的有個說法,磨刀不誤砍柴工。資料結構沒想好,後頭全是坑。”

呂辰又說:“還有一個問題。工程師坐在終端前面,敲一個命令,等半天才有反應,這也不行。”

“甚麼命令要等半天?”

“比如查一個單元的引數。標準單元庫有四百多個單元,每個單元有幾十個引數。如果存得不好,查一個引數要掃描整個庫,那就慢了。工程師翻手冊只需要幾秒鐘,計算機不能比手冊還慢吧?”

陳教授若有所思:“你是說響應速度?”

“對。”呂辰說,“使用者等不起。翻手冊是幾秒鐘,計算機如果做不到幾秒鐘,人家還不如翻手冊。所以資料組織方式必須考慮‘怎麼查得快’,不能每次都從頭掃到尾,得有索引,得能直接定位。”

陳教授笑了,在紙上畫了一個樹狀圖,又畫了一個格子圖。

“你這個問題,就是索引和檢索。樹結構、雜湊表,都是為了讓計算機不用掃遍所有資料就能找到目標。你把圖書館的卡片目錄搬過來就行,按型號建一個索引,按功能建一個索引,按引數建一個索引。想查甚麼,先查索引,再取資料,不用掃遍整個庫。”

他在雜湊表旁邊寫了兩個字:O(1)。

“這就是數學上的常數時間,不管庫有多大,查一次的時間是一樣的。你要的低延遲,就是這個。”

呂辰接著追問:“還有一個問題,算得慢。”

“算甚麼?”

“模擬。一個與非門單元,跑一遍模擬,可能要幾分鐘。四百多個單元,每個跑一遍,就是幾十個小時。這還只是一個版本。工程師改一版,又要重新跑。”

陳教授放下鉛筆,靠在椅背上:“你是說吞吐率?高吞吐?”

“對。”呂辰說,“不能讓大家排隊等著。得讓機器同時跑多個模擬,A工程師的與非門在跑,B工程師的或非門也在跑,互不干擾。這就是您剛才說的併發,但不是‘資料併發’,是‘計算併發’,多個人同時用,機器不能閒下來。”

陳教授想了想:“這個問題,比前兩個複雜。前兩個是‘怎麼存’‘怎麼查’,這個是‘怎麼排程’。多個任務同時提交,誰先算、誰後算、怎麼分配算力。如果機器夠多,還可以並行算,一個任務拆成幾塊,幾臺機器同時算,算完了再拼起來。”

他在紙上畫了一個任務佇列的圖。

“這個在數學上叫排程演算法。我們要的是單位時間內處理的任務儘可能多。但不是越多越好,還要考慮每個任務的等待時間。這就是權衡。”

呂辰最後說:“還有一個問題,也是最頭疼的。”

陳教授看著他。

呂辰說:“積體電路設計,不是一個人乾的活。有人畫版圖,有人跑模擬,有人做測試。版圖畫好了,模擬模型要跟著改;模擬模型改了,測試向量也要跟著改。這些資料是連著的,這邊改了,那邊不知道,就亂了。”

陳教授坐直了身子:“你是說——模型耦合?”

“對。”呂辰說,“版圖、模擬模型、測試向量,是同一個單元的不同側面。它們應該是一體的,改版圖的時候,系統應該提醒模擬模型可能也要改;跑模擬的時候,系統應該自動用最新的版圖資料。不能這邊改完了,那邊還在用舊的。”

陳教授沉默了一會兒,站起來走到書架前,抽出一本書翻了翻,又放回去。

他轉過身,看著呂辰:“你這個問題,比前面幾個都深。前面是‘怎麼存’‘怎麼查’‘怎麼算得快’,這個是‘怎麼讓不同的資料保持同步’。”

他走回來坐下,拿起鉛筆,在紙上畫了一個有向圖,幾個圓圈,箭頭從一個指向另一個。

“這涉及到資料之間的依賴關係。A改了,B要跟著改,C也要跟著改。這種依賴關係,可以用有向圖來表示。節點是資料,邊是依賴關係。A指向B,表示A改了B要跟著改。”

呂辰二人湊過去看那個圖,諸葛彪道:“那計算機能不能自動知道這種依賴關係?工程師改了一個單元的版圖,系統自動找出所有依賴它的模擬模型和測試向量,提示這些也要更新?”

陳教授點點頭:“理論上可以。但依賴關係要定義清楚,資料要能追蹤來源和去向。這又回到資料結構的問題,資料不能孤立地存,要存它們之間的關係。這就是剛才說的模型耦合,不同模型之間怎麼對齊、怎麼同步、怎麼保證一致性。”

陳教授放下鉛筆,靠在椅背上,看著茶几上那張畫滿圖的紙,沉默了好一會兒。

“諸葛、小呂,你們今天問的這幾個問題,多個人同時用、查得快、算得快、資料對得上,其實是一個問題。”

呂辰二人聽著。

陳教授說:“就是怎麼把標準單元庫的資料組織好,讓計算機既能存、又能查、還能管住它們之間的關係。這不只是一個‘庫’,這是一個‘知識系統’。就像圖書館不只是放書的地方,還是一個能查、能借、能管住書不丟、能知道誰借了哪本書的系統。”

他端起茶杯喝了一口,又放下。

“咱們剛才討論了‘強一致性、低延遲、高吞吐、模型耦合’,你們說的那些問題,就是這幾個詞的意思。”

呂辰二人對視一眼。

陳教授繼續說:“一致性,就是多個人同時用的時候,資料不能亂。延遲,就是查東西不能等。吞吐,就是算東西不能太慢。耦合,就是不同模組的資料要能對上。”

他看著二人,笑了笑:“你們想的問題,跟國外那些搞資料庫的人想的一樣。你們從使用者的角度,把需求說清楚了。剩下的事,怎麼實現,是我們搞數學和搞理論的事。”

又坐了一會兒,諸葛彪站起來:“教授,那我們就不打擾了。您過年好好歇幾天,年後見。”

陳教授送他們到門口,他忽然想起甚麼:“你們今天說的這幾個問題,每一個都是真問題,我記下來了,會在儲存櫃的設計中考慮進去。”

呂辰點頭:“打擾教授了。”

陳教授擺擺手:“打擾甚麼?使用者提需求,施工方負責落實,這樣才好,那些問題,從在辦公室裡可想不出來,還得聽聽一線的聲音。”

二人了門,一路出了燕園。

呂辰問道:“諸葛師兄,這個放心了吧?”

諸葛彪點點頭:“放心了,陳教授太厲害了,我現在好後悔,當時為甚麼不學數學。”

呂辰笑道:“得了吧,數學這碗飯,你確定啃得動?”

諸葛彪不服道:“怎麼啃不動?咱可以啃簡單的!”

呂辰打擊道:“你不學數學,見他如井中蛙觀天上月,你要是學了數學,見他如蜉蝣見青天。”

諸葛彪哈哈笑了起來:“你敢說我是蜉蝣?”

呂辰繼續打擊道:“嚴格來說,你不算蜉蝣,你是井中蛙!”

雪地上,兩行腳印歪歪扭扭地延伸向前方。

A−
A+
護眼
目錄