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