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