電話那頭的背景音亂成了一鍋粥。
有人在扯著嗓子喊網管,C區三號機加十塊錢,還有人在拍桌子罵你丟雷啊,閃到我了,夾雜著一連串的咳嗽聲和打火機點菸的聲音。陳拙把座機的話筒稍微拿遠了一點。
「你等會。」
楚戈在那頭喊了一聲,緊接著是一陣拖拽椅子的摩擦聲,聲音稍微小了些,似乎是換了個角落。「行了,你說,我找著筆了。」
楚戈咬著根糖,左手死死把話筒夾在肩膀和耳朵之間,右手在一堆亂七八糟的鍵盤線裡摸索出了一根原子筆。桌上沒有紙,他四下看了一眼,順手把旁邊吃剩的康師傅紅燒牛肉麵桶拉過來,把那層沾著幾滴紅油的硬紙蓋撕了下來,翻到背麵。紙蓋背麵有些潮濕,但不影響寫字。
陳拙站在客廳的窗戶邊,看著玻璃上那層薄薄的霜花,伸手在上麵劃了一道。
「京城那邊的資料庫是怎麼建的?」陳拙問。
「關係型,典型的樹狀結構。」
第一時間獲取最新章節,請訪問55.
楚戈使勁咬了兩口糖。
「他們想做一個六度空間的社交網,底層邏輯很簡單,我是A,我認識B,資料庫就建一條邊,查詢我的好友,速度很快,查詢我好友的好友,也勉強能跑。」楚戈的聲音透著一股熬夜過後的乾澀感。
「但是隻要往下查三度,四度,一旦並發量超過兩百人,資料庫就要做無限的嵌套聯合查詢,一張幾十萬用戶的表,瞬間交叉出幾千萬條冗餘數據。」「京城那哥們說,剛才他們做壓力測試,兩百個虛擬帳號同時點開可能認識的人這個功能,伺服器的風扇轉得像直升機,CPU直接飆到百分之百,三秒鐘後資料庫就鎖死了。」
楚戈嘆了口氣。
「現在這就成了一個死結,要想快,就得把所有關係提前算好存進緩存,但這需要海量的內存,他們買不起那麼多伺服器,如果不提前算,實時查,隻要稍微有幾個人同時訪問,資料庫就得崩。」
陳拙聽完,沒有立刻說話。
他走到沙發邊坐下,拿起果盤裡的一顆帶殼花生,在手裡輕輕捏開。
「你們學計算機的,是不是有點軸?」
陳拙把花生衣搓掉,語氣裡帶著一點笑意。
「什麼意思?」
楚戈愣了一下。
「這是個純粹的圖論問題,你們為什麼要用查戶口的辦法去解?」
陳拙把花生扔進嘴裡。
「丟掉你們的嵌套查詢,把所有的用戶,看成高維空間裡的點,用戶之間的關係,是一條線。」楚戈沒吭聲,筆尖停在泡麵蓋子上。
「建立一個鄰接矩陣。」
陳拙的聲音很平穩,像是在大學自習室裡給人講一道大一的微積分課後題。
「假設有十萬個用戶,就是一個十萬乘十萬的矩陣A,用戶i和用戶j是好友,矩陣中(i,j)的值就是1,否則就是0。」「等一下。」
楚戈打斷了他。
「十萬乘十萬,那是一百億個數據點,你算過這要占多大內存嗎?伺服器當場就得炸。」
「楚戈。」
陳拙在電話這頭輕笑了一聲。
「你在現實裡,有十萬個朋友嗎?」
ᴏᴏᴘ.ᴛᴡ 呈現最新的小說章節
「沒有,我連十個都沒有。」
楚戈老老實實地回答。
「正常人都沒有。」
陳拙說。
「所以,這個矩陣裡百分之九十九點九九的值,都是0,這是一個極度稀疏的稀疏矩陣。」楚戈拿著筆的手指猛地一緊。
「在內存裡,你不需要存那一百億個點,你隻需要存那些是1的坐標就行了。」
陳拙繼續往下說。
「這就是個簡單的坐標映射,接下來,你想找好友的好友,也就是二度人脈,在數學上怎麼表達?」楚戈的腦子轉得飛快,那些大一學過,後來又被他忘得差不多的線性代數知識,突然像閃電一樣劈開了他腦子裡的混沌。「矩陣乘法。」
楚戈脫口而出。
「A乘以A,A的平方。」
」。對「
。水溫杯了倒幾茶到走,身起站拙陳
」。脈人度三是就,方立的A,脈人度二是就,方地的零為不值裡陣矩,方平的A「
。來起促急得變吸呼,圈著畫地識意無麵上在筆子原,子蓋麵泡著看戈楚
」。消不吃是還UPC,法乘階高是其尤,了大太量算計的乘相陣矩是但「
。題問的心核最了出提戈楚
」。絡網係關的人有所出算性次一想你,了心貪太你是那「
。子嗓潤了潤,水口了喝拙陳
。雷炸聲一是像卻裡朵耳戈楚在但,輕些有得變音聲的拙陳」。法乘的陣矩和陣矩做要需不你,以所,求請的戶用個那的錄登前當答回要需隻器服伺,誰識認人有所道知要需不器服伺「
」。量向個一是他,陣矩個一是不,戶用的錄登前當「
。法解的後最了出給拙陳
」。友好度二出得,陣矩次一乘去果結拿再,量向友好接直的他出得,次一乘,陣矩疏稀個那乘去,量向維一個這拿你,量向的0是全餘其,1是置位個那己自他有隻個一「
。句一了補,頓了頓拙陳
。了淨乾咬經已糖的裡嘴戈楚,裡吧網」。了不用都秒毫一連,法乘的組數維一種這做機算計,脈人的度萬一有他算就,)N(0是度雜複間時,陣矩疏稀乘量向「
。上地在甩棍糖將把一,來過應反地猛才他,牙下一了駱被棍糖了到咬
。蓋紙麵泡的油紅著沾張那前麵著盯死死睛眼的他
。式公的亂淩些有行兩著寫麵上
。渣碎了成擊打維降接直,念概數代性線的礎基最句幾被,裡嘴孩男歲二十個這在。題問鎖死庫料資的頸瓶體硬解無為視生材高的係機算計華清個幾被,月個半整整隊團創初個那城京了擾困
」。了懂我「
發些有音聲的戈楚