【问题标题】:What's the point of specifying hibernate.jdbc.batch_size?指定 hibernate.jdbc.batch_size 有什么意义?
【发布时间】:2012-02-14 16:18:45
【问题描述】:

这个 Hibernate 配置表面上应该控制有多少对象被缓存在一级缓存中。原因很容易理解,我们不想耗尽内存。

但是有些事情让我很困惑。我见过的每个实现,包括this website 有明确的冲洗和清除。没问题,但是配置属性有什么意义呢?

注意:我在这里假设 Hibernate 以某种方式监视缓存的大小,并且如果某种类型的对象的数量增长到大于缓存大小,则将缓存与 db 同步。不知道这个假设是不是错???

【问题讨论】:

    标签: hibernate first-level-cache updatebatchsize


    【解决方案1】:

    此配置选项与一级缓存的大小无关。并且刷新会话不会从缓存中删除任何内容。它将挂起的更改(插入、删除、更新)写入数据库。仅当显式调用 clear() 或会话关闭时才会清除缓存。如果您不清除或子句会话(或检查特定实体),缓存将不断增长。这不是问题,因为它通常非常短暂(交易的持续时间)。

    JDBC 批量更新允许在一个批次中向数据库发送多个更新查询。它减少了网络调用的数量。您可以将其视为上传包含 20 个文件的未压缩 zip,而不是单独发送 20 个文件。

    混淆来自于您问题中链接的页面中提到的批量更新与 JDBC 批量更新无关。 Hibernate 对批处理更新的含义是“由批处理作业完成的更新”。批处理作业通常具有比典型业务用例更长的事务,并在单个事务中更新数百、数千甚至更多实体。这就是为什么 Hibernate 建议在这种情况下定期刷新和清除会话,以避免内存不足。

    【讨论】:

    • 谢谢你的澄清。不知何故,我认为它们是相关的,但这些都是单独的优化。
    猜你喜欢
    • 2014-02-11
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多