香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 98|回复: 2

几个 Java 数据库访问库的性能对比

[复制链接]

2

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-1-9 10:26:24 | 显示全部楼层 |阅读模式

几个性能关键点:

  • 一定要开事务 JDBC PreparedStatement.addBatch() 批量添加;
  • JPA、JDO 要注意及时 detach 被 ORM 框架管理的对象;
  • 有的库支持 L2 cache,关掉会提升性能;
  • 参数绑定时的 Java bean 反射影响性能;
软件包版本:

  • JDK 17, macOS 12.5.1, H2 2.1.214
  • JDBI 3.34.0
  • MyBatis 3.5.11
  • Ebean 13.10.0
  • JPA 3.1 + Hibernate 6.1.4.Final
  • JDO 3.2.1 + DataNucleus 5.2.12
  • jOOQ 3.17.4
没想到 jOOQ 性能这么差:
    public static void runJOOQ(String engine, int count, int batch) throws SQLException {
        try ( Connection conn = DriverManager.getConnection(DB_URL.formatted(engine), DB_USER, DB_PASS)) {
            conn.setAutoCommit(false);
            DSLContext create = DSL.using(conn, SQLDialect.H2);

            List<UserJourneyRecord> records = new ArrayList<>(batch);
            for (int i = 1; i <= count; ++i) {
                //records.add(create.newRecord(USER_JOURNEY, newUserJourney(i)));
                records.add(newUserJourneyRecord(i));

                if (i % batch == 0) {
                    create.transaction(c -> c.dsl().batchInsert(records).execute());
                    //create.batchInsert(records).execute();
                    records.clear();
                }
            }

            if (!records.isEmpty()) {
                create.transaction(c -> c.dsl().batchInsert(records).execute());
                //create.batchInsert(records).execute();
            }
        }
    }
jOOQ 的代码规模非常大,测试用例没开源……
回复

使用道具 举报

1

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-1-9 10:26:45 | 显示全部楼层
国际友人对几个库的 API 使用比较,比较老了,但还能看看:https://github.com/bwajtr/java-persistence-frameworks-comparison
回复

使用道具 举报

1

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-1-9 10:26:52 | 显示全部楼层
https://github.com/jOOQ/jOOQ/search?p=1&q=batch+slow&type=issues 作者知道这个问题,2015年就开始修了,七年了还没搞定。临时绕过去的办法是不要用 orm 风格 api,比如 batchInsert(Record..),而用 jdbc preparedstatement 风格的 api,不过这个就有点累了,bind()就相当于 stms.setXxx(),一个个字段搞下来写到手软[衰]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-9-15 05:37 , Processed in 0.209300 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表