聊聊Java資料庫開發的那點事兒
無論你開發的是一款PC端的Web應用,還是一款移動端的app,都需要一個數據庫來儲存你的業務資料(包括電商的商品資訊、遊戲的道具資訊、社交的人員資訊等等)。可以說,資料庫是後端系統最重要的儲存元件。
作為一名Java程式開發人員,你會發現你所完成的大部分程式碼邏輯最終都是在不斷的與資料庫進行互動。
在之前的交流中,我發現很多同學,尤其是從高校剛畢業的大學生,也包括一些從其他行業剛剛轉行進入Java 開發領域的從業者,對Java 語言中涉及資料庫開發的相關技能不是很瞭解,甚至會出現誤將SQL與資料庫開發劃等號的情況。
我們今天就來給大家介紹一下資料庫開發到底包括哪些技能。我們將資料庫開發的學習大致劃分為4個階段:基礎階段、框架階段、調優階段以及架構階段。
1.基礎階段
在基礎階段中,我們最先接觸的是JDBC(Java Data Base Connectivity),它是我們Java 程式訪問資料庫的最基礎的工具,它幫我們封裝了和資料庫互動繁瑣的協議。
熟練掌握JDBC的正確使用姿勢後,我們還需要掌握一些典型特定場景下JDBC的使用技巧,這些技巧將在後續我們實際工程開發中發揮重要作用。例如,在大資料量讀取的場景中,如果按照正常的步驟讀取資料庫中的資料,就會容易出現OOM(Out of memory)的異常,為了解決該異常,我們就需要用到“遊標”技術,通過多次讀取結果集的方式完成海量資料的讀取。
2.框架階段
基礎階段的學習主要是掌握最基本的如何在Java程式中訪問資料庫的問題,在框架階段,我們重點要解決的是程式碼可維護性、可重用性、可擴充套件性以及可讀性的問題。
我們同學在Java面試過程中,會經常被問到關於“設計模式”相關話題,框架的本質就是將設計模式的思想固化成應用程式中的整體結構類以及物件的關係,使用框架的目的就是讓開發者能夠更加專注的解決業務邏輯,而不需要關注程式碼結構設計,提高程式碼開發的效率,同時保證程式碼具備較高的質量。
框架階段的學習讓我們開發應用程式變得更加高效,我們可以很快的通過MyBatis搭建一個基於資料庫的Java 應用程式。但是資料庫作為後端唯一或者主要持久化元件,資料庫的請求處理能力和響應時間很大程度決定著應用程式的整體效能,所以資料庫效能優化成為下一階段學習的主要內容。
資料庫效能優化對於程式開發人員,這裡主要包括資料庫訪問優化、SQL優化以及死鎖的處理與解決。資料庫訪問優化這裡主要指的是連線池的使用與調優,連線池可以避免連線反覆建立和銷燬造成的效能開銷,大幅提高資料的訪問效能,同時還能限制資料庫連線數,避免系統過載。目前業界開源的優秀產品包括DBCP、C3P0對於開發者都是不錯的選擇。連線池除了基本的使用,更為複雜的是連線池的優化,包括失效連線檢測、自動重連、活躍連線控制等,都需要基於一定的開發經驗進行配置才能達到最大優化。
3.調優階段
SQL調優主要是針對程式開發人員編寫的SQL語句進行優化,這裡包括SQL語句是否走索引,索引選擇是否高效等。這部分的技能對於開發者,更為關鍵的是掌握基本的排查方式,包括慢SQL語句,檢視執行計劃,檢視索引的區分度等,根據排查的結果完成SQL調優。
資料庫作為將併發程式設計演繹到極致的大型系統,SQL語句的執行會涉及到對不同物件的加鎖,多條SQL語句併發執行就會衍生死鎖的問題,死鎖的排查和解決對於普通開發者來說是一個非常有挑戰的事情,因為這裡涉及了很多資料庫核心實現的細節,對於開發者來說,掌握基本的排查工具,瞭解儘可能多的不同SQL語句的資料庫加鎖方式是解決死鎖問題的根本方法。
4.架構階段
資料庫開發技能學習的最後一個階段,筆者將其歸結為架構階段,在這個階段中,我們需要站在一個更高的層次考慮資料庫的可用性、可靠性、擴充套件性等方面的難題。在我們實際工作中,經常會聽說某個系統不可用是因為資料庫宕機,這也反映了資料庫高可用的重要性。
在一個成熟的系統中,一定有一套完整的資料庫高可用解決方案,目前業界已有的高可用方案包括基於複製的主從資料同步技術、MHA、DRBD、Galera、NDB等,各有利弊,關鍵還是要看具體的業務應用場景,選擇合適的方案。例如,NDB 不適用於InnoDB儲存引擎的資料庫。這就需要我們對各個方案的利弊有一個清晰的瞭解,這是我們需要學習的。
*
總結
總的來說,資料庫開發的學習有幾個特點。
首先,涉及知識點非常廣泛,這就需要我們在學習過程中有一定的導向性,要帶著問題學習,最好能夠結合一個具體的工程實踐專案,通過不斷的學習,去解決專案過程中遇到的各種問題。
其次,資料庫開發涉及的知識點非常有深度,很多都涉及到資料庫的核心實現,這就需要我們不斷的去學習和積累,多閱讀一些資料庫核心實現的相關資料。
最後資料庫開發具有非常強的實踐性,業界有非常多的優秀的開源工具和產品,需要大家多動手,多實踐。
祝願大家在成為一名優秀的Java程式開發人員的道路上不斷突破自我。
【責任編輯:龐桂玉 TEL:(010)68476606】