閱讀506 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Spring Data實戰》——導讀

35cd4a16fe05a1eed74f2ba84fbf3c0591c07cb2


前言

數據訪問領域在過去的7年間發生了重要的變化。過去30年間一直占據企業級數據存儲和處理核心位置的關係型數據庫已經不能再獨領風騷了。在過去的7年間誕生了很多可選的數據存儲形式,當然也有的麵臨著消亡,它們被使用到了帶有關鍵任務的企業級應用程序之中。這些新的數據存儲形式是為了解決特定的數據訪問問題而設計的,使用關係型數據庫通常無法高效地解決這些問題。

將關係型數據庫推到拐點的一個問題就是擴展性(scale)。試問,我們如何將幾百甚至幾千TB(terabyte)的數據存儲到關係型數據庫中?這個問題讓我想到了一個笑話,病人說:“大夫,我一這樣動就疼”而醫生則說:“那就別這樣動唄!”暫且把笑話放在一邊,存儲如此巨量數據的推動力是什麼呢?在2001年,IDC報告說“人們創造和複製的數據將會超過1.8ZB(zettabytes),而且每隔兩年就會翻番[1]”。新的數據涵蓋各種類型,如媒體文件、日誌文件、傳感器數據(RFID、GPD、遙測設備……)、Twitter上的消息以及Facebook上的帖子。盡管對於企業來講存儲於關係型數據庫中的數據依然非常重要,但是這些新型的數據並沒有存儲在關係型數據庫之中。
很多的公司和科研實驗室在大數據這個詞流行起來之前就開始這樣做了。當前的過程與以往的不同在於,智能的數據分析所帶來的價值要高於硬件的成本。現在執行這種類型的分析不再需要購買4萬美元一顆的CPU了;商用的硬件集群中每顆CPU的價格是1000美元。對於大型的數據集,存儲區域網絡(Storage Area Network,SAN)以及網絡附屬存儲(Network Attached Storage,NAS)的價格較為昂貴:每GB(gigabyte)是1~10美元,如果複本構建到數據庫中而不是硬件之中,那本地磁盤的成本每GB隻有0.05美元。對於商用的硬件集群,使用本地磁盤的數據傳輸率也要比基於SAN或NAS的係統更高──對於相同價格的係統,前者能快500倍。在軟件方麵,新的數據訪問技術大多數都是開源的。盡管開源並不意味著零成本,但是這顯然會降低使用門檻,相對於傳統的商業軟件,它們能夠降低采購的整體成本。
要擺脫ACID特性的主要驅動力在於,很多的應用程序提高了可擴展寫(scaling write)的優先級,並且希望即便係統的某一部分失效,其他部分依然可以繼續運作。盡管在關係型數據庫中,可以通過在數據庫之前使用內存緩存來實現可擴展讀,但是進行可擴展寫要困難得多。為了標識這類應用程序,通常將其命名為“BASE”係統,在這裏縮寫代表著基本可用(basically available)、可擴展性(scalable)、最終一致性(eventually consistent)。具有鍵/值數據模型的分布式數據網格並沒有歸類到這種新的NoSQL數據庫之中。然而,它們提供了與NoSQL數據庫類似的特性,如數據的可擴展性以及組合計算能力和數據的分布式計算功能。

從上麵簡短的介紹中,你能夠了解到數據訪問的現狀,目前正在發生的是一場革命,關注數據的人會非常興奮。關係型數據庫並沒有消亡,在很多企業的運作中它依然是核心,並且會持續很長的時間。但是,趨勢很明顯:新的數據訪問技術解決了關係型數據庫所無法解決的問題,因此作為開發人員,我們必須要擴充自己的技能,要能夠處理這兩種技術。

Spring框架長期以來都致力於簡化Java應用程序的開發,尤其是使用Java數據庫連接(Java Database Connectivity,JDBC)或對象關係映射器編寫基於RDBMS的數據訪問層方麵。在本書中,我們力圖幫助開發人員使用這些新技術高效地編寫Java應用程序。Spring Data項目直接處理這些新的技術,因此你能夠將已有的Spring知識延伸到它們之中,或者通過使用Spring Data,也能夠更深入地學習Spring。不過,我們也沒有拋棄關係型數據庫。Spring Data為了Spring能支持RDBMS擴展了新功能。
本書希望為你提供實用的Spring Data項目的介紹,該項目的目的在於幫助Java開發人員使用最新的數據處理和管理工具,同時能夠以最新的方式使用傳統的數據庫。我們首先會為你介紹這個項目,闡述SpringSource以及該團隊背後的驅動力,並描述了示例工程的領域模型,這個例子將會在後麵的章節中使用,此外還介紹了如何獲取和搭建示例代碼(第1章)。

接著將會討論Spring Data Repository的基本理念,因為它們是後續各種數據存儲中都會涉及的通用主題(第2章)。對於Querydsl也是如此,我們將會在第3章中討論這個話題。這兩章為探討特定存儲與Repository的集成以及高級查詢功能奠定了堅實的基礎。

為了從Java開發人員熟悉的領域開始,我們會用一些時間來介紹傳統的持久化技術,如JPA(第4章)和JDBC(第5章)。這兩章闡述了在Spring已有的對JPA和JDBC的支持之上,Spring Data的模塊提供了什麼新特性。

在完成這些之後,將會引入Spring Data項目所支持的NoSQL存儲:以MongoDB為例介紹文檔數據庫(第6章),以Neo4j為例講解圖數據庫(第7章),以Redis為例講解鍵/值存儲(第8章)。列族數據庫HBase將會在稍後的章節中介紹(第12章)。這些章節中涵蓋的內容包括了將領域類映射到特定存儲的數據結構、通過所提供的應用程序編程接口(Application Programming Interface,API)與存儲進行便捷地交互以及對Repository抽象的使用。

目錄

第一部分 背景知識
第1章 Spring Data項目
1.1 為Spring開發人員提供的NoSQL數據訪問功能

1.2 主題概述
1.3 領域
1.4 示例代碼
1.4.1 將源碼導入到IDE
第2章 Repository:便利的數據訪問層
2.1 快速入門

2.2 定義查詢方法
2.2.1 查找查詢的策略
2.2.2 衍生查詢
2.2.3 分頁和排序
2.3 定義Repository
2.3.1 調整Repository接口
2.3.2 手動實現Repository方法
2.4 IDE集成
2.4.1 Intelli IDEA

最後更新:2017-05-31 13:31:18

  上一篇:go  《Spring 3.0就這麼簡單》——第1章 快速入門 1.1 Spring概述
  下一篇:go  《Spring Data實戰》——2.4 IDE集成