V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Braisdom
V2EX  ›  Java

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

  •  2
     
  •   Braisdom ·
    braisdom · 2020-12-24 15:45:28 +08:00 · 4537 次点击
    这是一个创建于 1408 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    高性能和易用性本身就不可能同时存在,此消彼长,具体项目具体分析,不能一概而论。
    Foredoomed
        14
    Foredoomed  
       2020-12-25 10:06:20 +08:00
    像 jooq 这种框架不被大多数用户接受的根本原因在于代码生成的 sql 不会是最优的
    Braisdom
        15
    Braisdom  
    OP
       2020-12-25 10:09:38 +08:00
    @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 10:31:47 +08:00
    @Braisdom 是的。框架选择,具体优化要针对自己实际项目的并发量,服务类型,服务结构来设计
    Braisdom
        17
    Braisdom  
    OP
       2020-12-25 10:58:27 +08:00
    @ytmsdy ORM 框架的选择是解决业务系统开发的易用性,而在大数据量插入时,可以手动拼接 SQL 的形式,不同场景不同的处理方式。
    taogen
        18
    taogen  
       2020-12-25 11:00:16 +08:00
    我认为 README 应该重点介绍
    1. 我为什么要用。ObjectiveSQL 解决了用户什么痛点?为什么要从熟悉的框架转用 ObjectiveSQL ? ObjectiveSQL 真的方便很多吗,还是只是换了种写法而已。
    2. 项目适不适合用。ObjectiveSQL 的优势是什么?在哪些场景有绝对优势? ObjectiveSQL 面向哪些目标用户?为什么要用 ObjectiveSQL ?我的项目适不适合用 ObjectiveSQL ?
    Braisdom
        19
    Braisdom  
    OP
       2020-12-25 11:02:41 +08:00
    @taogen 好想法,我目前只是介绍了,ObjectiveSQL 是什么?我需要仔细修改一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2857 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:22 · PVG 14:22 · LAX 23:22 · JFK 02:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.