【问题标题】:Can I use different Hibernate batch sizes depending on the entity or table?我可以根据实体或表使用不同的 Hibernate 批量大小吗?
【发布时间】:2021-03-23 00:08:30
【问题描述】:

我想知道是不是 a) 有意义并且 b) 是可能的 为不同的实体使用不同的创建批量大小?

例子:

  • 我有一张表A 有数百万行或几行,但只有几个小列。对于这个表,我可以将批处理值设置为大约 100 甚至 1000。
  • 但是,另一个表B 包含一个包含数千字节数据的列,这些数据在插入时填充。对于这个表,我认为我应该只使用 1 到 10 之间的批处理值。

也许我可以使用自己的org.hibernate.engine.jdbc.batch.spi.BatchBuilder 实现,根据要插入的实体设置批量大小? (通过设置休眠属性hibernate.jdbc.batch.builder。)

这听起来合乎逻辑吗?

【问题讨论】:

    标签: java hibernate jpa jdbc


    【解决方案1】:

    您的方法似乎是正确的。默认实现BatchBuilderBatchBuilderImpl,在buildBatch 方法中,传递的参数之一是BatchKey。这是格式(完全限定的实体类名)#(操作类型> 例如,com.test.A#INSERT。

    public class BatchBuilderImpl implements BatchBuilder, Configurable, Manageable, BatchBuilderMXBean { .......
    
    @Override
        public Batch buildBatch(BatchKey key, JdbcCoordinator jdbcCoordinator) {
            final Integer sessionJdbcBatchSize = jdbcCoordinator.getJdbcSessionOwner()
                    .getJdbcBatchSize();
            final int jdbcBatchSizeToUse = sessionJdbcBatchSize == null ?
                    this.jdbcBatchSize :
                    sessionJdbcBatchSize;
            return jdbcBatchSizeToUse > 1
                    ? new BatchingBatch( key, jdbcCoordinator, jdbcBatchSizeToUse )
                    : new NonBatchingBatch( key, jdbcCoordinator );
        }
    
    }
    

    在您的自定义实现中,您可以通过从包含实体类和相应批量大小的外部文件加载配置来设置批量大小。批量大小将取决于 BatchKey 的第一部分。

    【讨论】:

    • 感谢您确认我的建议。但是我错过了这部分,如果对不同的实体使用不同的批量大小是有意义的。为什么之前没有人实施呢?也许它不值得努力?
    • 可能是因为查询数据库时可以在dao中设置batch size。
    • @A.Alexander 我的 Hibernate 使用 EntityManager 或者是 Spring CrudRepository。在这两种情况下,我都看不到如何设置批量大小。你能解释一下你的意思吗?
    • @Datz - 在使用批处理时,尤其是与 Hibernate 一起使用时,您还必须牢记内存要求。那是因为那是因为 Hibernate 将所有新插入/更新的实例缓存在会话级缓存中,因此您的保存操作需要与适当的批量大小同步。此外,您有一个包含批次的实体类型,它本身需要大量内存,因此它可能需要不同的批次。在此处查看文档docs.jboss.org/hibernate/orm/5.4/userguide/html_single/…
    猜你喜欢
    • 2012-01-22
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多