1

hibernate 在读写方面是如何工作的:

  1. 如果应用程序对 DB 进行更多写入,hibernate 是如何工作的?在这种情况下,我知道每次写入都必须刷新缓存,除此之外是任何性能开销(与 JDBC 相比)

  2. 如果应用程序只读取数据(非常少的写入/更新),休眠如何工作?在这种情况下,由于不需要刷新缓存,我们可以期望 hibernate 的性能与 JDBC 一样好(或更好)(如果调整得当)。

另外,想了解在 case2 中使用的最佳选项(除了 ORM)。

4

2 回答 2

1

添加额外的层总是性能较差。然而,这个额外的层有时也会减少开发时间。因此,这一切都取决于您的用例和性能要求。如果您使用 ORM,那么您可以为读取和查询启用二级缓存,这就是您的应用程序级性能。但有时本地数据库缓存就足够了(这样集群中的每个节点都可以避免缓存)。

于 2012-08-08T11:51:05.310 回答
1

Hibernate 是一个可以使开发更容易的工具。我觉得(根据我自己的经验)Hibernate 开销不是很大。您可能最终会编写自己的 sql 结果到对象映射。如果你做得好,它可能会比 Hibernate 快一点。然而:

  • Hibernate 在会话中进行 L1 缓存,因此您无需记住是否从 DB 获取数据
  • Hibernate 性能调整比 JDBC 容易得多 - 只需将 Javamelody 插入实时应用程序并寻找最慢的 SQL,然后使用急切和延迟加载来使事情变得更快。无需 SQL 重写,也无需接触映射代码。你只需要调整一些注释
  • L2 缓存非常简单。有时数据库缓存可以解决问题,但它有其局限性。在 Hibernate 中,您可以启用关系缓存​​和查询缓存。当您的数据库成为瓶颈并且您的应用程序部署在多个节点上时,您会看到差异。分布式缓存将比访问数据库数千次要快得多。

总而言之,是的,Hibernate 有它的开销,但对我来说,调整功能非常重要,在复杂的应用程序中,使用 Hibernate 比使用普通 JDBC 有可能(而且很可能)具有更好的性能。我不需要说使用 Hibernate 和 QueryDSL 开发比使用普通 JDBC 快得多。

于 2012-08-08T20:32:47.507 回答