我可以根据实体或表使用不同的hibernate批处理大小吗?

7cwmlq89  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(333)

我想知道它是否a)有意义,b)是否可以为不同的实体使用不同的创建批量大小?
例子:
我有一张table A 有数百万行,但只有几个小列。对于这个表,我可以将批处理值设置为大约100甚至1000。
然而,另一张table B 包含一列,其中包含插入时填充的约千字节的数据。对于这个表,我认为应该只使用介于1和10之间的批处理值。
也许我可以用自己的实现 org.hibernate.engine.jdbc.batch.spi.BatchBuilder 我在哪里根据要插入的实体设置批量大小(通过设置hibernate属性 hibernate.jdbc.batch.builder .)
听起来合乎逻辑吗?

nhjlsmyf

nhjlsmyf1#

你的方法似乎是正确的。默认实现 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的第一部分。

相关问题