我在“Manning - Java Persistence with Hibernate”中找到了对批处理获取算法的描述:
真正的批量抓取算法是什么?(...) 想象一下批量大小为 20,总共有 119 个必须分批加载的未初始化代理。在启动时,Hibernate 读取映射元数据并在内部创建 11 个批处理加载器。每个加载器都知道它可以初始化多少个代理:20、10、9、8、7、6、5、4、3、2、1。目标是最小化加载器创建的内存消耗,并创建足够的加载器,每个可以产生可能的批量提取。显然,另一个目标是尽量减少 SQL SELECT 的数量。为了初始化 119 个代理,Hibernate 执行了 7 个批次(您可能期望有 6 个,因为 6 x 20 > 119)。应用的批处理加载器是 5 次 20、1 次 10 和 1 次 9,由 Hibernate 自动选择。
但我仍然不明白它是如何工作的。
- 为什么是 11 批装载机?
- 为什么批处理加载器可以初始化:20、10、9、8、7、6、5、4、3、2、1 个代理?
如果有人可以提出一步一步的算法...... :)