高效能是設計出來的
好多時候我主動或者被動參與到一些最佳化的工作中來。有的時候提升較大,比如我在公安行業時候,有一次開發找到我說,他們一天出一個報表,一次15個小時,忍受不了了。問我能不能最佳化到一個小時。我接手以後除了索引(不能僅僅指望索引,但是一點不用也不行),總之N個改進建議以後。最終執行的結果是6秒。15小時到6秒,大約9000倍的提升。當時開發吃驚的嘴都合不上了,但是這才是一個資料庫應有的效率。不少人誤解報表就應該很慢,其實這不一定的。以上這個雖然不是我個人的記錄,但是充分體現了最佳化比起硬體提升的收益之大。不過這裡有個前提條件就是開發不折不扣的按照我的思路去做了。如果我的建議和意見,不採納,不去實施,那一點用也沒有。就會形成“可憐夜半虛前席, 不問蒼生問鬼神。 ” 的結局。
但是有些系統給了建議也不改,很大程度上是因為,沒法改,因為設計的慘不忍睹,如果說改,還不如推翻重來,接受不了或者做不下來。 “高效能是設計出來的”,DBA圈內的至理名言。反過來說在設計糟糕的情況下一切最佳化都是扯淡。 我講最佳化從來幾乎不講SQL改寫,因為這樣的收效不大。我多年工作發現,幾乎都是設計問題,甚至是需求問題。這個重要嗎?我說重要可能未必大家都認可。多年前幫一個朋友忙,他們公司遇到問題(每週系統都故障至少一次),技術團隊最終定位是由於資料庫引起的。也是託人打聽到我,讓我去看看。我看過以後,指出了問題已經改進方法。技術團隊明白了問題所在,即可開始修改,有的可能是要改實現方式和邏輯。但是他們天天修改到凌晨2-3點,幹了一週。(私人小公司,系統不穩定,營收受到較大影響),所以比較認真對待。經過奮戰以後,結果是再也沒有出過問題,為此特意感謝了我。最後反饋說使用者反饋系統快的有點不適應了。
一個系統就看是不是自己的命,剛才這個案例中是因為私人小公司,出了問題損失都是自己的。而我挽救了系統的穩定,等於間接的救了公司的“命”。對於已經給了建議不能改的,那麼也沒有辦法。
那15個小時到6秒是極致嗎?顯然不是,所謂最佳化只能在現有的基礎上做的最大限度改善。 之所以能提升9000倍是設計還不算差,但是如果能按照我的設計的話,那個應該最多2秒就可以了。資料庫設計最重要的是資料型別和表的設計。每個專案和場景都是不一樣的,但是我見過很多的就是把以前專案的表在這裡鋪開就用。最後SQL寫的特別複雜和低下,那是因為用表去適配需求。而我覺得應該是根據需求來設計表,除非需求一模一樣,否則每個專案的表結構都應該不同。表結構設計的差不能用嗎?能,只是效能差。效能差不能用嗎?能,只是不穩定。不穩定要緊嗎?有的要緊,有的不要緊。還是看是不是重視。
我們很多系統故障不是因為網路中斷或者硬體損壞(這種極少,如果有那說明基礎環境不穩定,基礎環境不穩定的別指望資料庫可以解決),基礎環境的前提條件要去滿足,這些不滿足整改起來還是相對容易的。常年亞健康的資料庫(負荷高的)就像抵抗力弱的人,一旦有風吹草動就可能生病了。這種系統就要平時不斷檢查,要做預警,有的時候儘管有預警但是來的太快,幾秒鐘的時間就已經造成了事故,根本做不出反應。但是免疫力好的(幾乎沒負荷的資料庫),突然來一下十倍,甚至百倍的衝擊依然能抵抗住衝擊,從而保證系統正常執行,在這種情況下,即使沒有來得及做提前預警,無法比使用者早感知,但是還是可以平穩度過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2898999/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何設計出高可用、高效能的介面
- RPG遊戲的地圖和場景是如何設計出來的?遊戲地圖
- GDC2019:去年TGA最佳手遊《Florence》是如何設計出來的?
- Kafka 優秀的架構設計!它的高效能是如何保證的?Kafka架構
- 人是被帶出來的,不是管出來的
- 高效能佇列設計佇列
- MySQL | 05 如何設計高效能的索引?MySql索引
- 程式設計師簡歷上不準出現精通的潛規則是怎麼來的?程式設計師
- 你是如何離程式設計越來越遠的?程式設計
- 關於無限極分類設計如何分頁?如何設計出高效能的無限極分類?
- 如何設計一個高效能的圖 Schema
- 任天堂官方分享《集合啦!動物森友會》中動物是如何設計出來的?
- 是程式設計師,就用python匯出pdf程式設計師Python
- 遊戲架構設計——高效能並行程式設計遊戲架構並行行程程式設計
- 高效能javascript程式設計筆記JavaScript程式設計筆記
- 神愛程式設計師,於是帶來Python程式設計師Python
- 來來,一起設計一個簡單的活動釋出系統
- 專車架構進化往事:好的架構是進化來的,不是設計來的架構
- 《程式是怎樣跑起來的》讀書筆記1——對程式設計師來說CPU是什麼筆記程式設計師
- 如何設計一個高效能 Elasticsearch mappingElasticsearchAPP
- 高效能配置中心 duic - 設計&實現UI
- 這樣設計出來的遊戲,才能讓玩家感到“舒適”遊戲
- 使用列舉來寫出更優雅的單例設計模式單例設計模式
- 什麼是網頁設計的"原子設計”?網頁
- 一個高效能,高併發,高可用的系統是如何演變來的
- 使用 .NET Core 高效能併發程式設計程式設計
- 如何設計一個高效能閘道器
- GPU高效能程式設計CUDA實戰(二)GPU程式設計
- RocketMQ高效能之底層儲存設計MQ
- 5k和5萬程式設計師的差距原來是在於10大程式設計禁忌!程式設計師
- 計算機是怎樣跑起來的計算機
- “北上廣深”的程式設計師是如何生存下來的,真能有百萬存款?程式設計師
- 高效能四核處理器開發的閘道器原來是這樣的
- 原來智慧語音是“拼湊”出來的,重要的VAD模組
- 大型網站背後的高效能系統架構設計網站架構
- 看起來是執行緒池的BUG,但是我認為是原始碼設計不合理。執行緒原始碼
- 大牛們是如何寫出那些高質量、高效能的SQL查詢語句的?SQL
- 《雨中冒險2》的難度設計是好的設計嗎?