天天看點

如何借助 NoSQL 提高 JPA 應用性能

多年以前,筆者在為一家世界頂級汽車公司做電子商務網站項目時,曾經碰到過一個聽起來像科幻故事的概念:通過實體類别來自動實作資料持久存儲。

當時是21世紀初,大家還習慣于等待當時最牛的太陽微系統公司(sun microsystem)——跟現在蘋果公司的地位差不多——帶來各種重大發明,不過那可真的是模式的變更。它是緊跟面向對象程式設計(object oriented programming)出現的概念,不過它本身對主流應用開發世界來說就是一個重大的模式轉變。當時,在一個集中的資料庫中持久存儲資料的概念已經得到廣泛接受,關系資料庫也有很多。伺服器端 web 應用開始成為主流,當然,你還得選擇存儲資料的資料庫,雖然關系資料庫并不是唯一的選擇,但它們是當時所謂的“桌面應用”的首選。這些都表明,應用存儲和檢索資料的唯一方式是通過執行 sql 查詢。在很多情況下,這種操作是非常複雜的。

然而,釋出15年以來,開發者論壇關于最初主題的讨論依然有很多:如何改善 jpa 的性能表現。雖然硬體速度有了很大提升,同樣的問題依然存在。如今 jpa 成了主流技術,影響着世界上數以萬計的系統,這個問題就變得更加重要。orm 架構内在的問題并沒有改變:将面向對象的世界映射到關系世界并不是個小任務,需要付出大量的額外努力才能實作無縫對接。

但是如今,整個資料庫産業都在經曆變革。過去15年來,你得很有勇氣,才敢避開關系資料庫管理系統,使用其他備選方案來持久存儲資料——如果你能找到的話,更不要說你還要費盡力氣解釋自己為什麼要這麼做。如今,大量 nosql 資料庫增加了計算機科學出現更多新模式的可能性。說 jpa 不能從中受益簡直是大錯特錯,而且筆者認為它絕對能從中受益。從資料結構的觀點來看,要在 jpa 實作方法中持久存儲資料,很多 nosql 方法都更合理,效果也比表格或關系資料管理系統更好。

實作這種效果是通過有效利用一種智能映射方法,能夠識别出那些可以在低層級 kvs 中執行的檢索,進而避免繁冗、不必要的 sql。由于 c-treeace 是一種多模式資料庫,與資料庫互動的層(java 持久存儲層,縮寫為 jpl)能夠在 sql 和 nosql 之間自如轉換,進而優化每次 query.z 的執行。

如何借助 NoSQL 提高 JPA 應用性能

總之,關注 nosql 的各種動态發展很重要。nosql 的好處并不僅限于新的應用開發。在某些案例中,你可以見識到重新通路現有的、傳統的架構帶來的積極效果,比如說你的 jpa 的實作。無論你是用 hibernate,或者其他 orm 架構,資料庫替換都會是一個低風險、小投入的項目。你可能會發現,你很快就能節省幾千美元。