【比较 ORM 操作数据】操作批量新增、分页查询(四)
orm框架使用性能比较
比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp操作数据
环境:
idea jdk17 spring boot 3.0.7 mysql 8.0
测试条件常规对象
orm 框架 | 是否支持xml | 是否支持 Lambda | 对比版本 | 编码方式 |
---|---|---|---|---|
mybatis | ☑️ | ☑️ | 3.5.4 | lambda +xml 优化 |
sqltoy | ☑️ | ☑️ | 5.2.98 | lambda |
lazy | ✖️ | ☑️ | 1.2.4-JDK17-SNAPSHOT | lambda |
mybatis-flex | ☑️ | ☑️ | 1.8.0 | lambda +xml 优化 |
easy-query | ✖️ | ☑️ | 1.10.31 | lambda |
mybatis-mp | ☑️ | ☑️ | 1.4.1 | xml 优化 |
数据库表(含有唯一性索引s_u)
CREATE TABLE `sys_user` ( `column_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '额外字段', `create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `is_deleted` tinyint(1) DEFAULT NULL COMMENT 'null', `password` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码', `scope` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'null', `status` tinyint(1) DEFAULT NULL COMMENT '状态', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `username` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `s_u` (`scope`,`username`) ) ENGINE=InnoDB AUTO_INCREMENT=9223371632070323791 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
比较方法:增加、修改、删除、分页查询(当前项目暂时只比较批量新增和分页)
项目设计
-
声明 ORMRepository 接口提供对应增删改查方法
-
声明 ORMComparisonRepository接口 继承 ORMRepository 下游由不同ORM实现
-
声明 SysUserRepository 接口 继承 ORMRepository 用于循环调用不同orm实现方法执行方法测试产生测试结果
-
声明抽象类 SysUserRepositoryAbstractRecord 继承 ORMComparisonRepository 并且提供对应的框架执行结果存储
-
不同ORM框架mybatis、sqltoy、Lazy、easy-query、mybatis-mp 创建 ORMComparisonRepository 的实现
-
不同 ORM 操作数据的实现
测试条件 批量插入数据 10、100、1000、10000、100000 ,分页查询数据 10、100、1000、10000、100000
项目启动后使用浏览器打开 http://localhost:1003/sys/user/run-compare
测试条件(细节比较) 批量插入数据 1~10000,分页查询数据 1~10000
项目启动后使用浏览器打开 http://localhost:1003/sys/user/run-particulars-compare
测试执行过程
清空需要插入表中所有数据 通过三种ORM框架进行数据批量新增、而后进行分页查询,记录消耗时间,输出md文档
查看结果曲线图
测试结果(结果只提供参考)
MYBATIS_FLEX(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 9毫秒 | 25毫秒 | 79毫秒 | 624毫秒 | 6682毫秒 |
MYBATIS(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 34毫秒 | 28毫秒 | 121毫秒 | 647毫秒 | 6704毫秒 |
LAZY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 4毫秒 | 21毫秒 | 53毫秒 | 350毫秒 | 3663毫秒 |
MYBATIS_MP(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 8毫秒 | 20毫秒 | 92毫秒 | 601毫秒 | 6768毫秒 |
EASY_QUERY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 100毫秒 | 150毫秒 | 423毫秒 | 1965毫秒 | 19030毫秒 |
SQLTOY(batchStory) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 40毫秒 | 133毫秒 | 390毫秒 | 1617毫秒 | 15982毫秒 |
MYBATIS_FLEX(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 60毫秒 | 13毫秒 | 20毫秒 | 106毫秒 | 681毫秒 |
MYBATIS(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 834毫秒 | 740毫秒 | 691毫秒 | 702毫秒 | 783毫秒 |
LAZY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 14毫秒 | 13毫秒 | 19毫秒 | 82毫秒 | 492毫秒 |
MYBATIS_MP(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 621毫秒 | 657毫秒 | 652毫秒 | 607毫秒 | 687毫秒 |
EASY_QUERY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 85毫秒 | 14毫秒 | 25毫秒 | 76毫秒 | 522毫秒 |
SQLTOY(findPage) | 影响行数:10 | 影响行数:100 | 影响行数:1000 | 影响行数:10000 | 影响行数:100000 |
---|---|---|---|---|---|
执行时间: | 62毫秒 | 43毫秒 | 49毫秒 | 107毫秒 | 248毫秒 |
写在最后
细节数据对比(一万以内基本相差不大 一万以后数据差距明显拉开)
批量保存:
- 一万条数据以内 性能由高到低 mybatis-flex 、mybatis-mp、mybatis、lazy 性能趋于一致 sqltoy、easy-query 耗时出现明显起伏
- 十万数据时,处理时间由快到慢依次是: lazy、mybatis-flex、mybatis-mp、mybatis、easy-query、sqltoy
分页查询:
- 一万条数据以内 性能由高到低 lazy、mybatis-flex 、sqltoy、easy-query、mybatis、mybatis-mp
- 十万数据时,处理时间由快到慢依次是: sqltoy、lazy、easy-query、mybatis-mp、mybatis-flex、mybatis
快速数据对比(大数据曲线图)
当前项目地址
lazy-orm地址
mybatis地址
sqltoy地址
mybatis-flex地址
easy-query地址
mybatis-mp地址
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JS WebAssembly 工具链 Jco 1.0 正式发布
Jco 1.0 版本现已正式发布,稳定了 Wasm 组件的 Node.js 运行时,以及将其他语言编写的 Wasm 组件导入 JavaScript 的工具链。 项目团队计划继续稳定 Jco 的更多功能,其中有些功能已经可以尝试使用,包括:对浏览器的 native 支持,以及将 JavaScript 代码编译成 WebAssembly 的 native 支持。其他功能,如对 WebAssembly registry的支持尚未开始,预计将在不久后添加。 Jco 是一个为 WebAssembly 组件和 WASI 0.2 1 而构建的原生 Javascript WebAssembly 工具链和运行时。可以在 Node.js 内部原生运行 Wasm Components,从而可以轻松地使用不同编程语言编写的库,并使用 Node.js 运行时执行它们。通过实现整个 WASI 0.2 API surface,这些组件可以访问 Node.js 运行时中可用的网络、文件系统和其他系统 API。Jco 的目标是成为 JavaScript 中所有组件相关操作的综合工具。 Jco 是第三个 JS 工具链项目...
- 下一篇
全球最流行开源 Switch 模拟器 Yuzu 删除代码仓库、向任天堂支付 240 万美元
一周前,任天堂以"大规模助长盗版"为由起诉了开源 Switch 模拟器 Yuzu 的开发商 Tropic Haze。 今日,Yuzu 宣布项目关闭,双方没有在法庭上打官司,而是同意达成和解——Tropic Haze 向任天堂支付 240 万美元和解诉讼。 根据一份判决文件,Tropic Haze 不仅同意向任天堂支付 240 万美元,永久停止开发 Yuzu、托管 Yuzu、分发 Yuzu 的代码或功能、托管推广 Yuzu 的网站和社交媒体,或采取任何其他规避任天堂版权保护的行为。 https://storage.courtlistener.com/recap/gov.uscourts.rid.56980/gov.uscourts.rid.56980.10.1.pdf △Yuzu 的 GitHub 仓库已删除 此外,该公司还将向任天堂交出 yuzu-emu.org 域名,不仅同意删除 Yuzu 的拷贝,还同意删除"用于开发或使用 Yuzu 的所有规避工具,如 TegraRcmGUI、Hekate、Atmosphère、Lockpick_RCM、NDDumpTool、nxDumpFuse ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题