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

2020-12-24 15:45:28 +08:00
 Braisdom

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,感谢)

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

高性能和易用性本身就不可能同时存在,此消彼长,具体项目具体分析,不能一概而论。
Foredoomed
2020-12-25 10:06:20 +08:00
像 jooq 这种框架不被大多数用户接受的根本原因在于代码生成的 sql 不会是最优的
Braisdom
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
2020-12-25 10:31:47 +08:00
@Braisdom 是的。框架选择,具体优化要针对自己实际项目的并发量,服务类型,服务结构来设计
Braisdom
2020-12-25 10:58:27 +08:00
@ytmsdy ORM 框架的选择是解决业务系统开发的易用性,而在大数据量插入时,可以手动拼接 SQL 的形式,不同场景不同的处理方式。
taogen
2020-12-25 11:00:16 +08:00
我认为 README 应该重点介绍
1. 我为什么要用。ObjectiveSQL 解决了用户什么痛点?为什么要从熟悉的框架转用 ObjectiveSQL ? ObjectiveSQL 真的方便很多吗,还是只是换了种写法而已。
2. 项目适不适合用。ObjectiveSQL 的优势是什么?在哪些场景有绝对优势? ObjectiveSQL 面向哪些目标用户?为什么要用 ObjectiveSQL ?我的项目适不适合用 ObjectiveSQL ?
Braisdom
2020-12-25 11:02:41 +08:00
@taogen 好想法,我目前只是介绍了,ObjectiveSQL 是什么?我需要仔细修改一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX