00小说网 > 都市言情 > 我的智商逐年递增 > 第165章 拉倒吧
最新网址:www.00shu.la
    电话那头的背景音乱成了一锅粥。

    有人在扯着嗓子喊网管,C区三号机加十块钱,还有人在拍桌子骂你丢雷啊,闪到我了,夹杂着一连串的咳嗽声和打火机点菸的声音。陈拙把座机的话筒稍微拿远了一点。

    「你等会。」

    楚戈在那头喊了一声,紧接着是一阵拖拽椅子的摩擦声,声音稍微小了些,似乎是换了个角落。「行了,你说,我找着笔了。」

    楚戈咬着根糖,左手死死把话筒夹在肩膀和耳朵之间,右手在一堆乱七八糟的键盘线里摸索出了一根原子笔。桌上没有纸,他四下看了一眼,顺手把旁边吃剩的康师傅红烧牛肉面桶拉过来,把那层沾着几滴红油的硬纸盖撕了下来,翻到背面。纸盖背面有些潮湿,但不影响写字。

    陈拙站在客厅的窗户边,看着玻璃上那层薄薄的霜花,伸手在上面划了一道。

    「京城那边的资料库是怎麽建的?」陈拙问。

    「关系型,典型的树状结构。」

    楚戈使劲咬了两口糖。

    「他们想做一个六度空间的社交网,底层逻辑很简单,我是A,我认识B,资料库就建一条边,查询我的好友,速度很快,查询我好友的好友,也勉强能跑。」楚戈的声音透着一股熬夜过後的乾涩感。

    「但是只要往下查三度,四度,一旦并发量超过两百人,资料库就要做无限的嵌套联合查询,一张几十万用户的表,瞬间交叉出几千万条冗余数据。」「京城那哥们说,刚才他们做压力测试,两百个虚拟帐号同时点开可能认识的人这个功能,伺服器的风扇转得像直升机,CPU直接飙到百分之百,三秒钟後资料库就锁死了。」

    楚戈叹了口气。

    「现在这就成了一个死结,要想快,就得把所有关系提前算好存进缓存,但这需要海量的内存,他们买不起那麽多伺服器,如果不提前算,实时查,只要稍微有几个人同时访问,资料库就得崩。」

    陈拙听完,没有立刻说话。

    他走到沙发边坐下,拿起果盘里的一颗带壳花生,在手里轻轻捏开。

    「你们学计算机的,是不是有点轴?」

    陈拙把花生衣搓掉,语气里带着一点笑意。

    「什麽意思?」

    楚戈愣了一下。

    「这是个纯粹的图论问题,你们为什麽要用查户口的办法去解?」

    陈拙把花生扔进嘴里。

    「丢掉你们的嵌套查询,把所有的用户,看成高维空间里的点,用户之间的关系,是一条线。」楚戈没吭声,笔尖停在泡面盖子上。

    「建立一个邻接矩阵。」

    陈拙的声音很平稳,像是在大学自习室里给人讲一道大一的微积分课後题。

    「假设有十万个用户,就是一个十万乘十万的矩阵A,用户i和用户j是好友,矩阵中(i,j)的值就是1,否则就是0。」「等一下。」

    楚戈打断了他。

    「十万乘十万,那是一百亿个数据点,你算过这要占多大内存吗?伺服器当场就得炸。」

    「楚戈。」

    陈拙在电话这头轻笑了一声。

    「你在现实里,有十万个朋友吗?」

    「没有,我连十个都没有。」

    楚戈老老实实地回答。

    「正常人都没有。」

    陈拙说。

    「所以,这个矩阵里百分之九十九点九九的值,都是0,这是一个极度稀疏的稀疏矩阵。」楚戈拿着笔的手指猛地一紧。

    「在内存里,你不需要存那一百亿个点,你只需要存那些是1的坐标就行了。」

    陈拙继续往下说。

    「这就是个简单的坐标映射,接下来,你想找好友的好友,也就是二度人脉,在数学上怎麽表达?」楚戈的脑子转得飞快,那些大一学过,後来又被他忘得差不多的线性代数知识,突然像闪电一样劈开了他脑子里的混沌。「矩阵乘法。」

    楚戈脱口而出。

    「A乘以A,A的平方。」

    「对。」

    陈拙站起身,走到茶几倒了杯温水。

    「A的平方,矩阵里值不为零的地方,就是二度人脉,A的立方,就是三度人脉。」

    楚戈看着泡面盖子,原子笔在上面无意识地画着圈,呼吸变得急促起来。

    「但是矩阵相乘的计算量太大了,尤其是高阶乘法,CPU还是吃不消。」

    楚戈提出了最核心的问题。

    「那是你太贪心了,你想一次性算出所有人的关系网络。」

    陈拙喝了口水,润了润嗓子。

    「伺服器不需要知道所有人认识谁,伺服器只需要回答当前登录的那个用户的请求,所以,你不需要做矩阵和矩阵的乘法。」陈拙的声音变得有些轻,但在楚戈耳朵里却像是一声炸雷。

    「当前登录的用户,不是一个矩阵,他是一个向量。」

    陈拙给出了最後的解法。

    「一个只有他自己那个位置是1,其余全是0的向量,你拿这个一维向量,去乘那个稀疏矩阵,乘一次,得出他的直接好友向量,再拿结果去乘一次矩阵,得出二度好友。」

    陈拙顿了顿,补了一句。

    「向量乘稀疏矩阵,时间复杂度是0(N),就算他有一万度的人脉,计算机做这种一维数组的乘法,连一毫秒都用不了。」网吧里,楚戈嘴里的糖已经咬乾净了。

    咬到了糖棍被骆了一下牙,他才猛地反应过来,一把将糖棍甩在地上。

    他的眼睛死死盯着面前那张沾着红油的泡面纸盖。

    上面写着两行有些淩乱的公式。

    困扰了京城那个初创团队整整半个月,被几个清华计算机系的高材生视为无解硬体瓶颈的资料库死锁问题。在这个十二岁男孩嘴里,被几句最基础的线性代数概念,直接降维打击成了碎渣。

    「我懂了。」

    楚戈的声音有些发抖。

    「抛弃资料库的关系查询,把所有的关系表抽出来,在内存里维护一个稀疏矩阵,所有的查询,全部在内存里做向量相乘,算出结果後,再拿用户ID去资料库里提头像和名字。」

    「对。」

    陈拙应了一声。

    「但是有个问题。」

    楚戈的程式设计师思维迅速抓住了漏洞。

    「A认识B,B认识C,C又认识A,这在图论里是个环,如果向量一直乘下去,会不会无限循环,把算力耗死?」「楚戈。」

    陈拙在电话那头叹了口气,语气里带着点无奈。

    「这是工程问题,不是数学证明题,向量乘出来的结果里,凡是数值大於0的,你顺手用个哈希表把1D记下来,下次乘的时候遇到已经记过的,直接跳过不就行陈拙轻轻摇了摇头。

    「你是个写代码的,别指望数学公式连你拉屎用几格纸都算清楚,用点你程式设计师的常识好吗?」楚戈听着电话里那点调侃,突然咧开嘴乐了。

    「行,哥哥我承你这个情了,这回算我欠你的。」

    楚戈把那张泡面盖子折了两下,小心翼翼地塞进贴身的口袋里。

    「过完年回科大,我请你吃一个月的食堂小炒,先挂了,我得赶紧把这个底层的内存守护进程写出来。」没等陈拙说话,电话里传来了嘟嘟嘟的忙音。

    陈拙放下话筒,摇了摇头,嘴角带着一抹笑意。

    他转过身,走向厨房去拿碗筷,准备吃晚饭。

    距离泽阳市一千多公里外的京城。

    中关村附近的一栋破旧居民楼里。

    屋子里没开灯,只有三四显示器散发着惨白的光,窗外偶尔闪过几道绚烂的烟花,照亮了满地的菸头和吃剩的外卖盒。汪兴裹着一件棉服,整个人窝在电脑椅里,双眼布满血丝,死死盯着屏幕上的後日志。

    他们想在这个网际网路的荒蛮时代,做一个真正意义上的实名制校园社交网站,点子是极好的,几个汪兴甚至已经靠着PPT拉到了一笔几十万的天使投资。但是技术瓶颈卡死了他们。

    明天就是大年初三,投资人要求看一个承载五百人同时在线的系统Demo。

    汪兴已经三天没合眼了。

    只要并发量一上来,好友的好友这个核心功能的资料库查询,就会像雪崩一样拖垮整个系统。屏幕右下角的MSN图标突然跳动了起来。

    汪兴布满血丝的眼睛动了一下,握着滑鼠点开。

    是楚戈,那个远在徽州,被他拉来当免费技术外援的科大变态黑客。

    「老楚,别费劲了。」

    汪兴敲了一行字发过去,手指有些僵硬。

    「我们试了加缓存,试了建索引,没用,关系型资料库处理不了这种多级网状查询,硬体扛不住。」几秒钟後,楚戈发过来一个压缩包。

    只有不到Z0KB。

    紧接着,楚戈的消息弹了出来。

    「把你们之前的关系查询代码全删了,把这个C语言写的守护进程挂在伺服器後。」

    汪兴愣了一下。

    「这是什麽?」

    「一个内存级别的稀疏矩阵相乘工具。」

    楚戈的回覆很简单。

    「你只要把你们的关系表导出一份纯文本塞给它,以後所有的好友查询,不用过资料库,直接发指令给这个进程,它在内存里算完,把好友ID数组返回给你。」

    汪兴看着那段话,有些摸不着头脑。

    但他现在已经走投无路了,死马当活马医。

    他接收了文件,解压,把原始码拖进编译器,粗路地扫了一眼。

    这一看,汪兴的冷汗哗的一下就下来了。

    代码极其精简,没有任何资料库连接的库文件,全是底层的内存指针操作和几个他看不太懂的一维数组循环相乘。里面没有一条SL语句。

    汪兴深吸了一口气,把编译好的执行文件挂到了测试伺服器的後,然後把几万条测试用的关系数据塞了进去。进程悄无声息地启动了,占用内存不到五十兆。

    「跑个压测。」

    汪兴转头,对旁边另一个已经困得东倒西歪的王惠文喊了一声。

    王惠文迷迷糊糊地揉了揉眼睛,在键盘上敲下了一行压测指令。

    「模拟五百个并发请求,三级好友深度查询。」

    王惠文敲完回车。

    「兴哥,准备重启伺服器吧,估计还是三秒钟前. ..…」

    话还没说完,王惠文的声音卡在了喉咙里。

    压测工具的进度条并没有像之前那样死死卡住,而是以一种肉眼几乎无法捕捉的速度,瞬间刷满。满屏的绿色。

    汪兴猛地坐直了身体,椅子发出不堪重负的嘎吱声。

    他死死盯着压测结果的汇总数据。

    请求完成数:500。

    失败数:0。

    平均响应时间:3毫秒。

    汪兴觉得自己眼花了,他转头看了一眼伺服器的系统资源监控。

    在刚才压测的一瞬间,CPU的使用率仅仅跳动了一下,到了8%,然後又迅速回落到了1%。伺服器连风扇都没来得及加速转动,查询就已经结束了。

    屋子里安静得只能听到机箱微弱的蜂鸣声。

    「兴哥..…」

    旁边的王惠文咽了口唾沫,指着屏幕的手都在抖。

    「这什麽情况?资料库没转?」

    「没有过资料库。」

    汪兴的声音变得沙哑,他死死盯着刚才那段C代码,终於看明白了里面那可怕的数学逻辑。这不是在查数据。

    这是在内存里,直接对整个用户关系网进行数学维度的降维计算。

    汪兴的手指有些发麻,他切回MSN的聊天窗口,手速极快地敲字,甚至连打了好几个错别字都顾不上改。「老楚!这底层逻辑是谁写的?!」

    汪兴连续发了三个抖动窗口。

    「这他妈是纯粹的图论和高阶线性代数!直接把资料库的活儿抽给CPU内存做矢量计算了!」汪兴的心脏在狂跳。

    「你别告诉我这是你想出来的,你背後是不是有个中科院的算法团队?还是说你找了矽谷哪个搞搜寻引擎的大牛帮忙?」小县城的网吧里。

    楚戈看着屏幕上汪兴发来的那一连串感叹号和疯狂闪烁的窗口,疲惫的脸上露出了一个极其罄张的笑容。他拿起旁边那盒自己让朋友代买的几十块的糖,抽出一根,叼在嘴里。

    楚戈把菸灰弹在泡面碗里,双手搭在满是油污的键盘上,慢条斯理地敲下了一行字,点击回车发送。「没团队。」

    「就我同宿舍的一个室友,他刚好在家放寒假,刚才打电话顺手给解的。」

    发完这句,楚戈顿了顿,又补了一刀。

    「哦对了,他今年十二岁,这会儿估计正被他妈叫去吃饺子呢。」

    MSN那头,汪兴的头像彻底不动了。

    过了足足五分钟。

    汪兴才发过来一串省略号。

    接着是一句话。

    「老楚,如果明天投资人那边的钱到位了,我给你留百分之五的乾股,你那个室友...….能不能拉进咱们团队当技术顾问?什麽条件他随便开。」楚戈看着这句话,轻笑了一声。

    「拉倒吧。」

    楚戈敲字。

    「咱们这破草班子,你还敢指望人家那种大神来当技术顾问?这几行代码,就当是我送你们的新年礼物了,下了,睡觉。」楚戈果断地退出了MSN。

    网吧里的空气依然浑浊,旁边包夜的几个社会青年已经趴在键盘上睡着了,发出轻微的鼾声。楚戈站起身,伸了个大大的懒腰,骨头发出几声脆响。

    他走到吧结了帐,推开网吧的玻璃门。

    一股凛冽的寒风迎面扑来,瞬间吹散了身上沾染上的烟味和网吧特有的头油味。

    天已经蒙蒙亮了。

    大年初三的早晨,街道上冷冷清清,满地都是昨夜放完的红色鞭炮碎屑,在残雪的映衬下显得格外刺眼。楚戈把那件旧军大衣的领子竖起来,双手插在兜里。

    他走在清冷的街道上,呼出一口白气。

    在这个疯狂生长的时代前夜。

    有人在牌桌上通宵,有人在电脑前熬红了眼。

    而那个真正给他们指了条明路的人,现在在干什麽呢?

    楚戈忍不住笑了笑,踩着地上的碎纸屑,朝着招待所的方向走去。

    同一时间。

    泽阳市,阳光家属院。

    陈家客厅里的电视机开着,正在重播着昨晚的春节联欢晚会。

    冯巩那句我想死你们了在屋子里回荡。

    厨房里热气腾腾。

    「小拙!别在客厅晃悠了,去洗手!」

    刘秀英端着两盘刚出锅的饺子从厨房走出来,热气模糊了她的脸。

    「初一饺子初二面,初三的合子往家转,今天吃酸菜猪肉馅的饺子,赶紧过来趁热吃,一会儿坨了就不好吃了!」陈建国拿着几瓣大蒜和一瓶陈醋,在餐桌前坐下。

    「来了来了。」

    陈拙应了一声,走到卫生间,拧开水龙头。

    脑海里刚才那一闪而过的矩阵,向量,高维空间映射,在听到刘秀英喊吃饺子的那一刻,就像是被清水冲走的肥皂沫一样,瞬间消失得乾乾净净。什麽网际网路,什麽六度空间。

    在这个飘着雪花和醋香味的大年初三早晨,都比不上餐桌上那一盘热气腾腾的酸菜馅饺子来得实在。陈拙擦乾手,走到餐桌前坐下。

    「妈,给我倒点醋。」

    陈拙把小瓷碟推过去,语气里带着一个十二岁男孩特有的理所当然。

    刘秀英拿起醋瓶子,给他倒了半碟。

    「吃饺子不吃蒜,香味少一半,自己剥蒜去。」

    陈建国把两瓣大蒜扔到陈拙面前。

    陈拙捡起那两瓣蒜,拇指和食指用力一捏,蒜皮发出一声脆响,裂开了。

    阳光透过阳的玻璃照进来,打在陈拙温润如玉的脸上。

    一切都显得那麽平静,那麽理所当然。
最新网址:www.00shu.la