性能考虑
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
许多用户可能已经从 Hibernate 等更高级别的抽象切换到 jOOQ,因为 Hibernate 在处理大型数据库模式和复杂的二级缓存策略时,性能难以管理。 然而,jOOQ 本身并不是一个轻量级的数据库抽象框架,它也有自己的开销。 请务必考虑以下几点
- 构造 jOOQ 查询需要一些时间。 如果您可以重用相同的查询,则可以缓存它们。 但要注意线程安全问题,因为 jOOQ 的 Configuration 不一定是线程安全的,并且查询“附加”到创建它们的 DSLContext
- 呈现 SQL 字符串需要一些时间。 在内部,jOOQ 为整个查询重用相同的
java.lang.StringBuilder
,但某些呈现元素可能需要一些时间。 当然,您可以缓存 jOOQ 生成的 SQL 并准备您自己的java.sql.PreparedStatement
对象 - 将值绑定到预处理语句需要一些时间。 在内部,jOOQ 不保留任何打开的预处理语句。 使用复杂的连接池,它将缓存预处理语句并通过标准 JDBC API 将它们注入到 jOOQ 中
- 获取结果需要一些时间。 默认情况下,jOOQ 始终会将完整的
java.sql.ResultSet
获取到内存中。 使用延迟获取来防止这种情况,并在打开的底层数据库游标上滚动
明智地优化
不要被上面的段落吓到。 您应该明智地优化,即仅在真正需要对数据库进行非常高吞吐量的地方进行优化。 与纯 JDBC 相比,jOOQ 的开销通常每个查询少于 1 毫秒。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!