[譯]高性能Java持久化(1) - 前言

在企業(yè)級(jí)應(yīng)用系統(tǒng)中, 一個(gè)好的數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)會(huì)對(duì)整個(gè)系統(tǒng)的性能帶來(lái)很大影響摔笤。根據(jù)Appdynamics1的統(tǒng)計(jì):

超過(guò)一半的的應(yīng)用的性能瓶頸來(lái)自于數(shù)據(jù)庫(kù).

數(shù)據(jù)有很多種不同的格式(表行,索引節(jié)點(diǎn))花颗,并且數(shù)據(jù)庫(kù)記錄會(huì)被多個(gè)并發(fā)用戶讀寫(xiě)。從并發(fā)角度而言甫窟,這是很具挑戰(zhàn)性的任務(wù)瑞筐。為了能強(qiáng)化數(shù)據(jù)訪問(wèn)層,數(shù)據(jù)訪問(wèn)邏輯必須與底層數(shù)據(jù)庫(kù)很好地配合随橘。


圖1-1 數(shù)據(jù)訪問(wèn)技能棧

一個(gè)典型的RDBMS(關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng))數(shù)據(jù)訪問(wèn)層掌握很多技術(shù)喂分,最弱的技術(shù)會(huì)限制整個(gè)企業(yè)級(jí)解決方案。在進(jìn)入更高級(jí)抽象層(比如ORM框架)前必須先精通底層技術(shù)机蔗。

1.1 數(shù)據(jù)庫(kù)服務(wù)器與連通層

數(shù)據(jù)庫(kù)手冊(cè)不僅僅只是給數(shù)據(jù)庫(kù)管理員用的蒲祈。與數(shù)據(jù)庫(kù)打交道但是卻不知道它的原理甘萧,就跟無(wú)照駕駛是一樣的。是否熟悉SQL標(biāo)準(zhǔn)和數(shù)據(jù)庫(kù)特性是構(gòu)建高性能應(yīng)用的關(guān)鍵梆掸。
某些高效的特性因?yàn)椴荒茉俨煌臄?shù)據(jù)庫(kù)間通用扬卷,由于害怕數(shù)據(jù)庫(kù)的一致性從而會(huì)避免使用這些技術(shù)。實(shí)際上酸钦,更常見(jiàn)的是維持使用一個(gè)低效的數(shù)據(jù)庫(kù)層怪得,而不是去使用一個(gè)新的數(shù)據(jù)庫(kù)解決方案。
所有的數(shù)據(jù)訪問(wèn)都依賴(lài)于JDBC API去和數(shù)據(jù)庫(kù)服務(wù)器通信卑硫。JDBC提供了很多性能優(yōu)化技術(shù)徒恋,旨在降低事務(wù)響應(yīng)時(shí)間、容納更多的訪問(wèn)欢伏。
因此本書(shū)的第一部分將專(zhuān)注于JDBC入挣,并且會(huì)講到連接管理、Statement批量操作硝拧、Result結(jié)果集的讀取和數(shù)據(jù)庫(kù)事務(wù)的核心径筏。

1.2 應(yīng)用程序數(shù)據(jù)訪問(wèn)層

在企業(yè)級(jí)應(yīng)用中有一些已經(jīng)被證實(shí)有效的模式。Martin Fowler的《企業(yè)應(yīng)用架構(gòu)模式》是每一個(gè)企業(yè)應(yīng)用開(kāi)發(fā)者都應(yīng)該閱讀的障陶。獨(dú)立于對(duì)象關(guān)系映射模型滋恬,許多ORM框架都應(yīng)用了很多模式,例如Unit of Work, Identity Map, Lazy Loading, Embedded
Value, Entity Inheritance or Optimistic and Pessimistic Locking抱究。

1.2.1 ORM框架

ORM工具也可以加快應(yīng)用開(kāi)發(fā)速度恢氯,但是學(xué)習(xí)曲線毫無(wú)疑問(wèn)是陡峭的。要掌握將關(guān)系型數(shù)據(jù)和領(lǐng)域模型連接的復(fù)雜的內(nèi)在關(guān)系媳维,唯一的辦法就是在使用的過(guò)程中去了解它酿雪。
有時(shí)候即使說(shuō)明文檔都不一定夠,為了解決一些性能相關(guān)的問(wèn)題侄刽,不可避免地需要了解其源碼指黎。JPA擅于寫(xiě)數(shù)據(jù)是因?yàn)樵诔志没瘜?duì)象變化時(shí)所有DML語(yǔ)句會(huì)被自動(dòng)執(zhí)行。這樣就可以加快迭代開(kāi)發(fā)過(guò)程州丹。
本書(shū)第二部分會(huì)介紹各種Hibernate特有的優(yōu)化技術(shù)醋安,例如id生成器、高效實(shí)體提取墓毒、狀態(tài)轉(zhuǎn)換吓揪、應(yīng)用級(jí)事務(wù)和實(shí)體緩存。

1.2.2 原生查詢構(gòu)造器框架

JPA和Hibernate不是為了去取代SQL的所计。在一些應(yīng)用中原生的SQL查詢是不可避免的柠辞。JPA將普通的對(duì)象檢索進(jìn)行抽象,但是當(dāng)某些讀取和處理數(shù)據(jù)的時(shí)候主胧,沒(méi)有什么能比SQL更方便叭首。
JPQL(Java Persistence Querying Language)將不同的數(shù)據(jù)庫(kù)的查詢規(guī)范進(jìn)行了抽象习勤,對(duì)上提供統(tǒng)一的API。因此它缺乏對(duì)某些特有功能的支持焙格,例如Window Functions图毕、Common Table Expressions、Derived tables和PIVOT眷唉。與JPA相反予颤,jOOQ(Java Object Oriented Query)對(duì)數(shù)據(jù)庫(kù)的特性支持非常好。它提供的類(lèi)型安全的查詢構(gòu)造器可以防止應(yīng)用遭受SQL注入攻擊冬阳。
因此蛤虐,本書(shū)第三部分會(huì)介紹使用jOOQ進(jìn)行高級(jí)查詢的技術(shù)。

關(guān)于數(shù)據(jù)庫(kù)性能基準(zhǔn)測(cè)試

本書(shū)中很多用于證明性能相對(duì)提升的基準(zhǔn)測(cè)試摩泪“恃妫基準(zhǔn)測(cè)試的結(jié)果通常依賴(lài)于底層硬件劫谅、操作系統(tǒng)或者數(shù)據(jù)庫(kù)服務(wù)器配置见坑、數(shù)據(jù)大小和并發(fā)模式。因此捏检,性能的絕對(duì)值沒(méi)有相對(duì)值重要荞驴。最相關(guān)的基準(zhǔn)測(cè)試結(jié)果其實(shí)就是相對(duì)于實(shí)際生產(chǎn)系統(tǒng)的。
為了防止讀者根據(jù)基準(zhǔn)測(cè)試來(lái)比較兩個(gè)不同的數(shù)據(jù)庫(kù)從而得到一個(gè)錯(cuò)誤的結(jié)論贯城,書(shū)中會(huì)把數(shù)據(jù)庫(kù)的名稱(chēng)模糊地記做DB_A熊楼,DB_B,DB_C和DB_D能犯。
本書(shū)中所使用的所有示例的源碼都在GitHub鲫骗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市踩晶,隨后出現(xiàn)的幾起案子执泰,更是在濱河造成了極大的恐慌,老刑警劉巖渡蜻,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术吝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡茸苇,警方通過(guò)查閱死者的電腦和手機(jī)排苍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)学密,“玉大人淘衙,你說(shuō)我怎么就攤上這事∧迥海” “怎么了彤守?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵漩氨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我遗增,道長(zhǎng)叫惊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任做修,我火速辦了婚禮霍狰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饰及。我一直安慰自己蔗坯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布燎含。 她就那樣靜靜地躺著宾濒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屏箍。 梳的紋絲不亂的頭發(fā)上绘梦,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音赴魁,去河邊找鬼卸奉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颖御,可吹牛的內(nèi)容都是我干的榄棵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼潘拱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疹鳄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起芦岂,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘪弓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盔腔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杠茬,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年弛随,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓢喉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舀透,死狀恐怖栓票,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤走贪,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布佛猛,位于F島的核電站,受9級(jí)特大地震影響坠狡,放射性物質(zhì)發(fā)生泄漏继找。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一逃沿、第九天 我趴在偏房一處隱蔽的房頂上張望婴渡。 院中可真熱鬧,春花似錦凯亮、人聲如沸边臼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柠并。三九已至,卻和暖如春富拗,著一層夾襖步出監(jiān)牢的瞬間臼予,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工媒峡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘟栖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓谅阿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酬滤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子签餐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容