|
我無(wú)意間看到一篇文章,里面有些觀點(diǎn),讀來(lái)讓我想哭:
MySQL里的命名都有點(diǎn)長(zhǎng),帶有描述性,例如timeAdded或valueCached。對(duì)于不多的數(shù)據(jù)來(lái)說(shuō),每行只會(huì)多占用幾個(gè)字節(jié),但當(dāng)你有1億行時(shí),每行用100個(gè)字節(jié)存字段名,這樣一下子就白白用掉了你的硬盤(pán)的大量空間。僅僅是字段名就用掉了100 * 10,000,000 = ~900MB!
如果我們把名稱(chēng)減到2-3個(gè)字符,這也許會(huì)使代碼變得有點(diǎn)難懂,但節(jié)省下來(lái)的硬盤(pán)卻是物有所值的。使用一些簡(jiǎn)煉的名稱(chēng)看起來(lái)也不是那么糟,例如timeAdded -> tA。每行節(jié)約15個(gè)字節(jié),那么一億行就意味著只從名稱(chēng)上就能省大約140MB,–一個(gè)很大的節(jié)省。
讓我們花幾秒鐘做道算術(shù)題,好嗎?
一個(gè)2TB的硬盤(pán)目前價(jià)值120美元。根據(jù)我的數(shù)學(xué)知識(shí),我得出:
- 1 TB = 60 美元
- 1 GB = 0.058 美元
換句話(huà)說(shuō),他們說(shuō)的這很大的節(jié)省是多少呢?5分錢(qián)!
那么,讓我們來(lái)做另外的一道算術(shù)題吧。
一個(gè)程序員每年的勞力成本大概是75,000美元。
- (52 周– 2 周假期)x 40 工時(shí) = 2,000 工時(shí)每年。
- 75,000 / 2,000 = 37.5 美元/小時(shí)
- 37.5 / 60 分鐘 = 62 美分每分鐘。
換句話(huà)說(shuō),假設(shè)這個(gè)改變要花費(fèi)一分鐘的程序員的時(shí)間,那整個(gè)的節(jié)省還不及消耗的。
而且肯定花費(fèi)的時(shí)間不止一分鐘。
有些人指出實(shí)際的服務(wù)器磁盤(pán)空間要更貴一些。當(dāng)然,你說(shuō)的沒(méi)錯(cuò)。我只是在簡(jiǎn)單的說(shuō)明一個(gè)問(wèn)題。即使假設(shè)按你說(shuō)的價(jià)格再高出2個(gè)數(shù)量級(jí),那也只有5美元。難道你要對(duì)我說(shuō)省下這一杯咖啡的錢(qián)很有意義嗎?
有人指出MongoDB為了提高效率,把整個(gè)數(shù)據(jù)都加載到了內(nèi)存里了。這篇文章談?wù)摰氖谴疟P(pán)空間,可沒(méi)說(shuō)到內(nèi)存,但即使這樣,那也沒(méi)關(guān)系。因?yàn)镸ongoDB只是把索引放到了內(nèi)存里,但我想(推測(cè)的)每行索引里并不需要存儲(chǔ)字段名。如果它真的存了,我想它們的實(shí)現(xiàn)方式里肯定有嚴(yán)重的錯(cuò)誤。
[英文出處]:You saved 5 cents, and your code is not readable, congrats!
it知識(shí)庫(kù):為了5分錢(qián)把程序搞的面目全非,恭喜了!,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。