Hibernate 是 Java 语言的对象关系映射库。 它为您提供从 Java 类到数据库表的映射,并缩短了整体开发周期。 由于 Hibernate 提供的好处,越来越多的高事务应用程序是使用 Hibernate 开发的。 这是 Java 应用程序中的 Hibernate 示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import org.hibernate.*; public class HibernateSample { ... Session session = factory.openSession(); session = factory.openSession(); Transaction tx = session.beginTransaction(); Query query = session.createQuery("from Customer c"); Iterator it = query.list().iterator(); while (it.hasNext ()){ Customer customer = (Customer) it.next(); ... } tx.commit(); session.close(); } |
但是,这些高流量 Hibernate 应用程序遇到了一个主要的可扩展性问题。 尽管它们能够在应用层级别进行扩展,但它们的数据库或数据存储无法随着事务负载数量的增加而扩展。
Java 分布式缓存是解决此问题的最佳技术,因为它减少了导致可伸缩性瓶颈的昂贵的数据库访问。 为此,Hibernate 提供了一个缓存基础设施,包括一级缓存和二级缓存。
Hibernate 一级缓存为您提供了一个基本的独立(进程内)缓存,它与 时间 对象,并且仅限于当前会话。 但是,Hibernate 一级缓存的问题是它不允许在不同会话之间共享对象。 如果不同会话需要相同的对象,所有这些都会使数据库旅行以加载它,这最终会增加数据库流量并导致可伸缩性问题。 此外,当会话关闭时,所有缓存数据也会丢失,下次您必须从数据库中再次获取它。
这些只有一级的高流量Hibernate应用部署在Web Farm中时,也面临跨服务器缓存同步的问题。 在网络场中,每个节点运行一个网络服务器——Apache、Oracle WebLogic 等——具有多个实例 httpd的 处理请求。 并且,Hibernate 在每个一级缓存中 httpd的 工作进程具有直接从数据库缓存的相同数据的不同版本。
这就是为什么 Hibernate 为您提供具有提供程序模型的二级缓存。 休眠二级缓存 允许您插入 3rd 方分布式(out-proc)缓存提供程序,用于跨会话和服务器缓存对象。 Hibernate二级缓存与 会话工厂 对象并且可用于整个应用程序,而不是单个会话。
当你启用 Hibernate 二级缓存时,你最终会得到两个缓存; 一个是一级缓存,另一个是二级缓存。 如果尝试从二级缓存中检索对象失败,Hibernate 总是尝试从一级缓存中检索对象。 如果这也失败了,则直接从数据库加载对象并缓存。 这种配置显着减少了数据库流量,因为大部分数据由二级服务 分布式缓存.
NCache Java 通过扩展实现了一个 Hibernate 二级缓存提供程序 org.hibernate.cache.CacheProvider. 您可以轻松插入 NCache Java Hibernate 分布式缓存提供程序与您的 Hibernate 应用程序无需任何代码更改。 NCache 允许您将 Hibernate 应用程序扩展到多服务器配置,而数据库不会成为瓶颈。 NCache 还为您提供所有企业级分布式缓存功能,如数据大小管理、跨服务器和数据库的数据同步等。
你可以插 NCache Java Hibernate 缓存提供程序只需修改 hibernate.cfg.xml 和 ncache.xml 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<hibernate-configuration> <session-factory> <property name = "cache.provider_class"> alachisoft.ncache.integrations.hibernate.cache.NCacheProvider, alachisoft.ncache.integrations.hibernate.cache </property> </session-factory> </hibernate-configuration> <ncache> <region name = "default"> <add key = "cacheName" value = "myClusterCache"/> <add key = "enableCacheException" value = "false"/> <class name = "hibernator.BLL.Customer"> <add key = "priority" value = "1"/> <add key = "useAsync" value = "false"/> <add key = "relativeExpiration" value = "180"/> </class> </region> </ncache> |
因此,通过使用 NCache Java Hibernate 分布式缓存提供程序可以线性扩展您的 Hibernate 应用程序,而无需更改任何代码。
因此,请下载完整的 60 天试用版 NCache Enterprise 并亲自尝试一下。
我只是想告诉你,我只是博客的初学者,非常喜欢你的网站。 我很可能打算为你的博客添加书签。 你真的带来了很棒的故事。
鉴于其中包含如此多的信息,这些类型的文章让用户对网站感兴趣,并继续分享更多。
钦奈的java培训
有用的博客……谢谢分享