簡體   English   中英

我可以根據實體或表使用不同的 Hibernate 批量大小嗎?

[英]Can I use different Hibernate batch sizes depending on the entity or table?

我想知道a)是否有意義,b)是否可以為不同的實體使用不同的創建批量大小?

例子:

  • 我有一個表A有數百萬或行,但只有幾個小列。 對於這個表,我可以將批處理值設置為大約 100 甚至 1000。
  • 但是,另一個表B包含一個包含數千字節數據的列,這些數據在插入時填充。 對於這張表,我認為我應該只使用 1 到 10 之間的批處理值。

也許我可以使用自己的org.hibernate.engine.jdbc.batch.spi.BatchBuilder實現,我根據要插入的實體設置批量大小? (通過設置 hibernate 屬性hibernate.jdbc.batch.builder 。)

這聽起來合乎邏輯嗎?

你的方法似乎是正確的。 默認實現BatchBuilderBatchBuilderImpl並且在buildBatch方法中傳遞的參數之一是BatchKey 這是格式(完全合格的實體 class 名稱)#(操作類型> 例如,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 );
    }

}

在您的自定義實現中,您可以通過從包含實體 class 和相應批量大小的外部文件加載配置來設置批量大小。 批量大小將取決於 BatchKey 的第一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM