流行 ORM 框架性能测试(如图) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Braisdom
V2EX    Java

流行 ORM 框架性能测试(如图)

  •  2
     
  •   Braisdom
    braisdom 2020 年 12 月 24 日 4980 次点击
    这是一个创建于 1849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    perf

    Benchmark (framework) Mode Cnt Score Error Units BenchmarkRunner.query mybatis thrpt 10 66.269 ± 5.584 ops/ms BenchmarkRunner.query jdbc thrpt 10 125.223 ± 6.476 ops/ms BenchmarkRunner.query hibernate thrpt 10 57.952 ± 2.983 ops/ms BenchmarkRunner.query objsql thrpt 10 85.329 ± 4.812 ops/ms BenchmarkRunner.update mybatis thrpt 10 118.780 ± 6.028 ops/ms BenchmarkRunner.update jdbc thrpt 10 184.414 ± 10.612 ops/ms BenchmarkRunner.update hibernate thrpt 10 66.626 ± 1.556 ops/ms BenchmarkRunner.update objsql thrpt 10 130.013 ± 2.718 ops/ms 

    其中 ops/ms 表示每毫秒完成的操作

    无论是查询,还是更新,与 MyBatis 无法拉开较大的差距,但多次运行后,总是稳定的领先。ObjectiveSQL 在性能与易用性上相比其它 ORM 框架优势比较明显,编写的代码量上优势更加明显,希望大家多多体验,并能提交 issue,

    https://github.com/braisdom/ObjectiveSql

    (喜欢的朋友,给个 star,感谢)

    第 1 条附言    2020 年 12 月 25 日
    19 条回复    2020-12-25 11:02:41 +08:00
    wysnylc
        1
    wysnylc  
       2020 年 12 月 24 日   2
    我觉得是辣个蓝人秽土转生
    taogen
        2
    taogen  
       2020 年 12 月 24 日 via Android
    没说过程,直接给结果?可复现吗?
    buliugu
        3
    buliugu  
       2020 年 12 月 24 日
    建议直接建一个 repo 放 Benchmark,发个图太 ppt 了不够硬核(逃
    leon0318
        4
    leon0318  
       2020 年 12 月 24 日 via iPhone
    越接近原生 sql 性能越好,封装越深性能越差~很浅显而又试用的道理
    shyangs
        5
    shyangs  
       2020 年 12 月 24 日
    mybatis 3.5.6
    hibernate 5.2.12.Final
    rb6221
        6
    rb6221  
       2020 年 12 月 24 日
    这里面应该只有 hibernate 算 orm 框架吧
    Braisdom
        7
    Braisdom  
    OP
       2020 年 12 月 25 日
    Braisdom
        8
    Braisdom  
    OP
       2020 年 12 月 25 日
    @buliugu 估计你没有进项目里看,这里有完整的 benchmark 代码,
    Braisdom
        9
    Braisdom  
    OP
       2020 年 12 月 25 日
    @janus77 ORM 到底是什么,有哪些特征,很难说清,理论上,将关联数据库的表转换为 Java Class 都可以称为 ORM
    @leonme 性能和易用性两者要平衡考虑的,两个指标不可能同时都非常高,封装是解决开发的复杂度,在不的场景中有不同的选择
    ytmsdy
        10
    ytmsdy  
       2020 年 12 月 25 日
    易用性越好,封装的越多,性能肯定下降。
    越接近原生态,性能肯定越接近原生态。
    但是我觉得吧,绝大部分网站还没有到达性能瓶颈。程序跑的慢,绝大部分是程序写的有问题。
    noble4cc
        11
    noble4cc  
       2020 年 12 月 25 日
    这个 objsql 就是大佬你的作品吧,有点类似 jooq,之前脚本语言的框架很多都有这设计
    Braisdom
        12
    Braisdom  
    OP
       2020 年 12 月 25 日
    @noble4cc 是的,有点类似,前期参考过 Jooq,发现 Jooq 有好多地方做的不够好,所以自己才写了一个,主要是针对复杂 SQL 进行处理,同时也支持简单 SQL 的处理。
    Braisdom
        13
    Braisdom  
    OP
       2020 年 12 月 25 日
    @ytmsdy

    高性能和易用性本身就不可能同时存在,此消彼长,具体项目具体分析,不能一概而论。
    Foredoomed
        14
    Foredoomed  
       2020 年 12 月 25 日
    像 jooq 这种框架不被大多数用户接受的根本原因在于代码生成的 sql 不会是最优的
    Braisdom
        15
    Braisdom  
    OP
       2020 年 12 月 25 日
    @Foredoomed 要理解 ObjectiveSQL 不是生成 SQL,而能用 Java 的语法写 SQL,你看到的 Java 代码几乎和 SQL 一模一样,是不是最优看你怎么写 Java 代码了。

    Order.Table orderTable = Order.asTable();
    Select select = new Select();

    select.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100)
    .from(orderTable)
    .where(orderTable.quantity > 30 &&
    orderTable.salesAt.between("2020-10-10 00:00:00", "2020-10-30 23:59:59"))
    .groupBy(orderTable.productId);
    ytmsdy
        16
    ytmsdy  
       2020 年 12 月 25 日
    @Braisdom 是的。框架选择,具体优化要针对自己实际项目的并发量,服务类型,服务结构来设计
    Braisdom
        17
    Braisdom  
    OP
       2020 年 12 月 25 日
    @ytmsdy ORM 框架的选择是解决业务系统开发的易用性,而在大数据量插入时,可以手动拼接 SQL 的形式,不同场景不同的处理方式。
    taogen
        18
    taogen  
       2020 年 12 月 25 日
    我认为 README 应该重点介绍
    1. 我为什么要用。ObjectiveSQL 解决了用户什么痛点?为什么要从熟悉的框架转用 ObjectiveSQL ? ObjectiveSQL 真的方便很多吗,还是只是换了种写法而已。
    2. 项目适不适合用。ObjectiveSQL 的优势是什么?在哪些场景有绝对优势? ObjectiveSQL 面向哪些目标用户?为什么要用 ObjectiveSQL ?我的项目适不适合用 ObjectiveSQL ?
    Braisdom
        19
    Braisdom  
    OP
       2020 年 12 月 25 日
    @taogen 好想法,我目前只是介绍了,ObjectiveSQL 是什么?我需要仔细修改一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2734 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 14:40 PVG 22:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86