Batoo JPA –比領先的JPA提供商快15倍

介紹

我早在2000年代就喜歡JPA 1.0。 我甚至在穩定版本發布之前就將其與EJB 3.0一起使用。 我非常喜歡它,因此我為JBoss 3.x實現貢獻了一些零碎的部分。

那時我們公司規模還很小。 創建新功能和應用程序比性能更重要,因為我們有很多想法,我們需要盡快開發和營銷這些想法。 現在,我們不再需要為數據模型和部署描述符編寫繁瑣且易于出錯的xml描述。 我們也不需要使用名為“ XDoclet”的詛咒。

另一方面,我們的公司穩定增長,我們的網站已成為該國現場直播和票務的頂級門戶。 現在,我們遇到了性能問題! 盡管公司發展Swift,但由于行業經濟因素,我們并未賺到多少錢。 我們面臨的挑戰是我們的公司是一家票務公司。 每個電子商務業務都有旺季和淡季。 但是對于票務來說,是淡季和旺季。 當您每小時售出x張平均票時,當一個大型活動開始銷售時,需求突然變成一小時1000張xs。 歡迎來到地獄!

我們晝夜不停地進行調整,以增強應用程序,以使用任何可用的功能來保持一天的正常運行。 坦率地說,無論我們多么努力,總會有一個更大的事件使該網站癱瘓。

夢想結束了,我意識到在框架之上開發應用程序有點“小心!” 以及“樂趣”。

我繼續學習

我喜歡編程,喜歡Java,喜歡開源。 我在所有可能的平臺上開發了幾乎所有可能的類型應用程序。 對于其余的我去發現了東西。 感謝開源,我從大師那里學到了很多東西。 與大多數人相反,我閱讀了Linus Torvalds,Gavin King,Ed Merks等偉大的程序員編寫的文章和代碼。

通過積累的經驗,我退出了自己喜歡的票務公司,成為了軟件顧問。 這在我眼前開啟了一個新時代,那里有很多行業以及許多不同的平臺和行業。

在每個項目中,我都成為該應用程序的性能警察。

我現在是表演狂!

我服用了紅色藥丸!

有一天我對自己說,JPA可以更快嗎? 如果是,那么速度有多快。 我花了大約兩個星期的時間來創建一個持久化并加載實體的實體管理器。 然后我運行它,并將結果與??Hibernate的結果進行比較。 結果并沒有真正的希望,我在持久化和查找實體方面僅比Hibernate快50%。 我又花了一個星期來調整循環,緩存元模型塊,將對類的訪問從接口更改為抽象類,將列表修改為數組等。 突然我有了一個比Hibernate快50倍以上的原型!

Batoo JPA的開發

只關注以性能為中心的編碼,性能急劇提高,這讓我感到驚訝。 那時,我正在使用Visual VM來衡量在JPA層中花費的時間。 我開始編寫了一個自我分析工具,該工具可以測量在JPA層上花費的CPU資源,并開始實施JPA 2.0規范的各個方面。 每次迭代之后,我都會重新運行基準測試,當性能大幅下降時,我會重新進行更改并逐行檢查新代碼–我創建的性能分析工具報告了JPA Stack每行的性能影響。

整個規范花費了大約6個月的時間,最重要的是,我引入了一個Maven插件來在構建時創建字節碼檢測,并引入了一個互補的Eclipse插件以允許在Eclipse IDE中使用檢測。

Batoo JPA經過6個月的運輸,于2012年8月出生。它的測量速度比Hibernate快15倍以上。

基準測試

如前所述,引入了一個基準來測量Batoo JPA的每個微開發迭代。 創建此基準并不是為了提出Batoo JPA很快的領域,以便其他人相信Batoo JPA,而是為了將幾乎每個JPA應用程序中存在的最常見的域模型和持久性操作匯總在一起而創建的-我知道快速的Batoo JPA是。

性能指標

該方案是:

  • 一個人物對象
    • 帶電話號碼– PhoneNumber對象

引入了常見的生命周期任務:

  • 堅持10萬個人對象,每個會話中有兩個電話號碼和兩個地址(每批次10個)
  • 找到并加載250K個人對象,每個會話10個
  • 每次會話刪除5K人對象,每對象5個
  • 用100個批次更新100K個人對象
  • 使用面向對象的標準查詢API查詢人員對象25K次。
  • 使用JPQL – Java持久性查詢語言,類似于SQL的查詢腳本語言,可查詢人員對象25K次。

為簡單起見,該基準測試是在內存嵌入式Derby之上運行的,而探查器將在

  • 單元測試層
  • JPA層
  • 德比層

由于不相關,因此從結果中省略了在單元測試層花費的時間。

結果

下表中給出的時間是運行基準測試場景時在JPA層中花費的毫秒數。 在不同的運行中對Batoo和Hibernate JPA運行相同的測試,以隔離啟動,內存,緩存,垃圾回收等效果。

下表顯示

  • 在Derby層花費的總時間作為數據庫操作總計
  • 測試的類型為Test
  • Derby層作為DB Operation進行每個測試的時間
  • 在JPA層作為核心操作的每次測試的時間
  • 在JPA層上花費的總時間作為核心操作總計
  • 在JPA和Derby層上花費的總時間為Operation Total

以下是Hibernate和Batoo JPA占用的CPU資源的比率。 假定一個應用程序按比率平均生成1個保存,5個定位,2個刪除和3個更新以及5 + 5個總共10個查詢。 現在,盡管這些數字非常依賴于應用程序的性質,但仍需要某種假設來衡量整體速度比較。

在上述情況下,Batoo JPA的測量速度比領先的JPA實施Hibernate快15倍以上。

您可能已經注意到,Batoo JPA不僅在JPA層上執行得非常快,而且還采用了許多優化措施來減輕數據庫的壓力。 這就是為什么Batoo JPA在DB Layer上花費的時間是Hibernate的一半的原因。

結果解釋

我們非常感謝JPA不是應用程序的單個部分。 但是我們確實相信當前的JPA實現會消耗您的服務器預算中的相當一部分。 盡管典型的應用程序集群在持久層上花費的CPU資源大約為%20到%40,但Batoo JPA仍將其集群減小到其一半大小,從而可以節省大量許可管理和硬件以及騰出空間。即使對于非集群友好的應用程序也可以擴展–根據我的經驗,我看到在96核心Solaris系統上運行的應用程序僅僅是因為它們不可擴展。

使用Batoo JPA

結論

我們已經成功創建了一個JPA產品,它使您可以享受JPA Technology的強大功能,但又不要求您犧牲性能!

最重要的是,Batoo JPA是使用Apache編碼標準開發的,并且在代碼中包含有價值的文檔。 該項目代碼庫是使用LGPL許可證發布的,并且絕對沒有封閉的源代碼部分,我們預想它將永遠這樣。

如前所述,它還具有互補的Maven和Eclipse插件,可為構建和開發階段提供工具。

Batoo JPA與規范的偏差幾乎為零,這使得現有JPA應用程序很容易遷移到Batoo JPA,而無需其他學習階段即可開始使用它。

最后但并非最不重要的一點是,Batoo JPA不僅可以在運行應用程序時節省您的時間,而且可以在部署應用程序時節省您的時間。 Batoo JPA雇用并行部署程序管理器來并行處理部署。 考慮到開發人員在他/她的開發階段每天部署10次(如果不是100次)的部署,使用中等規模的域模型,總結起來可能會花費相當多的開發人員時間。 盡管我們尚未對部署速度制定具體基準,但我們知道Batoo JPA的部署速度比Hibernate快3到4倍。

感謝您花費大量時間閱讀本文,并希望我們為您提供免費的應用程序檢查,并演示僅通過替換JPA實施即可獲得的收益。

有用的鏈接:

項目網站– http://batoo.jp/

Batoo JPA的來源和問題管理在Github上托管– https://github.com/organizations/BatooOrg

您可以在StackOverflow.com上討論Batoo JPA – http://stackoverflow.com/questions/ask?tags=batoo+jpa

翻譯自: https://www.javacodegeeks.com/2012/10/batoo-jpa-15x-faster-than-the-leading-jpa-provider.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370509.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python軟件是哪個國家的品牌_有哪些好用的軟件被國人誤認為是外國研發的?

國產軟件被標榜上了英文,即便不是英文,用拼音寫出來,也會有人誤認為是國外的軟件。因為這樣可以顯得高大上,為什么我們會有這樣的想法,是崇洋媚外嗎,并不是,而是之前的國產軟件的確有不少讓我們…

簡單的Session案例 —— 一次性驗證碼

一次性驗證碼的主要目的就是為了限制人們利用工具軟件來暴力猜測密碼,其原理與利用Session防止表單重復提交的原理基本一樣,只是將表單標識號變成了驗證碼的形式,并且要求用戶將提示的驗證碼手工填寫進一個表單字段中,而不是通過表…

[BZOJ2064]分裂

[BZOJ2064]分裂 試題描述 背景: 和久必分,分久必和。。。 題目描述: 中國歷史上上分分和和次數非常多。。通讀中國歷史的WJMZBMR表示毫無壓力。 同時經常搞OI的他把這個變成了一個數學模型。 假設中國的國土總和是不變的。 每個國家都可以用他…

CSS3選擇器

基本選擇器 回顧選擇器 通配符選擇器元素選擇器類選擇器ID選擇器后代選擇器新增基本選擇器 子元素選擇器相鄰兄弟選擇器通用兄弟選擇器群組選擇器 子元素選擇器 概念:子元素選擇器只能選擇某元素的子元素 語法:父元素 > 子元素 (Fathe…

eclipse java工程目錄_轉載:Eclipse下的java工程目錄

對新手來講,一個Java工程內部的多個文件夾經常會讓大家困惑。更可惡的是莫名其妙的路徑問題,在Eclipse編寫Java程序中,出現頻率最高的錯誤很可能就是路徑問題。這些問題原因其實都是一個,就是關于Java工程內的文件結構理解不清&am…

作為JBoss AS 7模塊運行Drools 5.4.0 Final

Drools 5引入了業務邏輯集成平臺,該平臺為規則,工作流和事件處理提供了統一的集成平臺。 它是從頭開始設計的,因此每個方面都是一流的公民,毫不妥協。 Drools 5已分為4個主要子項目: Drools Guvnor(BRMS …

postgres 支持的線程數_線程池被打滿了怎么處理呢,你是否真的了解線程池?

0、前言線程池,顧名思義就是線程的池子,在每次需要取線程去執行任務的時候,沒必要每次都創建新線程執行,線程池就是起著維護線程的作用,當有任務的時候就取出一個線程執行,如果任務執行完成則把線程放回到池…

[樹形DP]沒有上司的舞會

題目鏈接 思考 首先本題中的關系是一種樹形結構,而且符號最優子結構和無后效性,所以可以進行記憶化搜索。 那么首先要在這顆樹中選出一個點作為根節點,按照習慣我們將沒有父節點的點作為根節點。 接下來要思考的是 狀態: dp[i][0…

網頁自適應

1.viewport標簽 基本語法&#xff1a; <meta name”viewport” content”widthdevice-width,initial-scale1” /> 上面這行代碼的意思是&#xff0c;面積的100%&#xff0c;網頁寬度默認等于屏幕寬度&#xff08;widthdevice-width&#xff09;, 原始縮放比例&#x…

java 大數處理

頭文件&#xff1a;import java.util.*;import java.math.*; Scanner cin Scanner (System.in);//讀入while(cin.hasNext())//等價于!EOFncin.nextInt();//讀入一個int型的數ncin.nextBigInteger();//讀入一個大整數 輸出&#xff1a; System.out.print(n);//打印nSystem.out.…

java provider_Java SPI(Service Provider Interface)

//ServiceLoader實現了Iterable接口&#xff0c;可以遍歷所有的服務實現者public final class ServiceLoaderimplements Iterable{//查找配置文件的目錄private static final String PREFIX "META-INF/services/";//表示要被加載的服務的類或接口private final Clas…

帶有自定義注釋的Java注釋教程

Java注釋提供有關代碼的信息&#xff0c;并且它們對所注釋的代碼沒有直接影響。 在本教程中&#xff0c;我們將學習Java注釋&#xff0c;如何編寫自定義注釋 &#xff0c;注釋用法以及如何使用反射來解析注釋 。 注釋是在Java 1.5中引入的&#xff0c;現在它已在Hibernate&…

mybatis通用mapper_全網最全Mapper解析,附實操代碼幫你更好理解

今天給大家介紹一位老朋友當你第一次接觸Java開發的時候&#xff0c;這個老朋友就和你形影不離&#xff0c;當你要進行ORM的時候&#xff0c;單表的增刪改查&#xff0c;這位老朋友給了你極大的幫助&#xff0c;不知道你想到他了嗎&#xff1f;對&#xff0c;這就是通用mapper&…

初嘗微信小程序2-基本框架

基本框架&#xff1a; .wxml &#xff1a;頁面骨架 .wxss &#xff1a;頁面樣式 .js &#xff1a;頁面邏輯 描述一些行為 .json &#xff1a;頁面配置 創建一個小程序之后&#xff0c;app.js,app.json,app.wxss是必須的&#xff0c;而且名字也不能隨意更改&#xff0c;…

JSP內置對象,動作,指令總結

總的來說關于JSP界面有九大內置對象,7大動作,三大指令,現在博主就將這些粘貼出來,此文是很久前整理的學習筆記,如有雷同請諒解! jsp九大內置對象:1>out 向客戶端輸出數據,字節流.如out.print(" dgaweyr"); 2>request 接收客戶端的http請求.String getParameter…

洛谷 P1795 無窮的序列_NOI導刊2010提高(05)

P1795 無窮的序列_NOI導刊2010提高&#xff08;05&#xff09; 題目描述 有一個無窮序列如下&#xff1a; 110100100010000100000… 請你找出這個無窮序列中指定位置上的數字 輸入輸出格式 輸入格式&#xff1a;第一行一個正整數N&#xff0c;表示詢問次數&#xff1b; 接下來的…

java 取字符串中的數字_java截取字符串中的數字

隨便給你一個含有數字的字符串&#xff0c;比如&#xff1a;String s"eert343dfg56756dtry66fggg89dfgf";那我們如何把其中的數字提取出來呢&#xff1f;大致有以下幾種方法&#xff0c;正則表達式&#xff0c;集合類&#xff0c;還有就是String類提供的方法。1 Stri…

番石榴的對象類:Equals,HashCode和ToString

如果您有幸使用JDK 7 &#xff0c;那么新的可用Objects類 &#xff08; 至少對我來說 &#xff09;是實現“通用” Java對象方法&#xff08;例如equals&#xff08;Object&#xff09; [with Objects.equals&#xff08;Object&#xff0c;Object &#xff09; ]&#xff0c; …

此服務器的時鐘與主域控制器的時鐘不一致_中移動“超高精度時間同步服務器”開標,兩家中標...

8月25日&#xff0c;中國移動發布《2020年至2022年同步網設備集中采購_中標候選人公示》公告。兩家中標。同步網技術比較小眾&#xff0c;但是同步網是5G承載網的重要一環&#xff0c;分享一下&#xff0c;供大家參考。中標情況 標包1-時鐘同步設備中標候選人依次排序為&#x…

java 異常管理員_GitHub - kangZan/JCatch: Exception異常管理平臺,支持Java、PHP、Python等多種語言...

什么是JCatch當程序發生異常(Exception)&#xff0c;處理方式一般是通過日志文件記錄下來&#xff0c;這種方式很容易被忽略&#xff0c;而且查詢起來比較麻煩。JCatch提供了一種方案&#xff0c;當程序發生異常時&#xff0c;通過JCatch平臺接口提交到JCatch平臺&#xff0c;由…