2012-04-18 80 views
4

我有其中有200桌的应用程序 - 分为4组Hibernate的缓存技术

  1. 非事务(50桌) - 表像系,命名等,这是由管理员更新一次,而有时(100000读取:& 1write /月)

  2. 减事务(50台)1write比率 - 等,其读出越来越插入经常较少,但在写操作发生的日常(1000读取设置,产品,税率表:1个写入比率& 1个写/日)

  3. 事务(50台)-tables像被写入和读出几乎同样的订单,收据等(10读:1写入& 1写入/小时)

  4. 重型事务(50台) - 表等任务,历史等,这都写多读少,但按服务使用&报告(1个阅读:1写道& 1写入/分钟)

我使用Hibernate的,Struts2的&春寻找缓存策略来获得最佳性能& effi ciency。

如果你观察到我有更多的数据写在&最多的表中,那么将它们缓存在更关键的位置。

我可以缓存组4表吗?如果是的话如何?

我可以缓存组3表吗?如果是的话如何?

我可以缓存组2表吗?如果是的话如何?

我可以缓存组1表吗?如果是的话如何?

我可以在内存数据库中使用某些表吗?

在某些情况下可以查看帮助我吗?哪些情况?

那么我最终想要的是从内存数据库中快速读取访问,有些东西会在数据库更改时更新我的​​内存数据库。就像说我有产品列表,内存中的订单列表,但是当任何新产品或订单被添加时,这个列表必须重新加载自己。典型情况下,所有的读取都来自内存中的数据库,而所有的写入操作都是直接使用触发器来更新列表或列表项。

+0

如果您higest是每分钟1个操作,我严重怀疑缓存是很重要的。数据库的速度非常快,每分钟1次读取/写入不太可能压倒数据库。只有在出现性能问题时才进行优化,并且如果您已经测量并证明缓存是解决方案。否则,你会添加任何东西的复杂性。 – 2012-04-18 11:14:22

+0

无它只是每表用户球痕的身影,将会有100个用户和多个表.......需要更加n多快基本上:)至于即使它不是一个非常高的规模的系统,而是提供一个请求我们必须尽可能减少响应时间。 – 2012-04-18 11:30:37

+0

您是使用Hibernate特定的API还是使用Hibernate作为实现的JPA? – 2012-04-18 11:46:32

回答

4

让与缓存的经验法则开始,

缓存被频繁读取,很少改变非交易数据。

Hibernate允许你安全地到达那里。从这一点,即使你仍然可以使用缓存,但它并不是真正的推荐,因为你可能会遇到多个问题。所以最好在此谨慎行事。看看下面的文章列表,它会给你更多的见解。

  1. Hibernate: Truly Understanding the Second-Level and Query Caches
  2. Understanding Caching in Hibernate – The Second Level Cache
  3. Improving Hibernate's Performance

所以,当我们将此规则应用于您的方案,只有第一组应该得到缓存。首先,衡量您的应用程序的性能改进。如果事情没有问题,你可以考虑缓存第二组。建议不要缓存事务表,以便排除集合3和4。

1

尽管ManuPk已经以非常详细的方式回答了问题,但我只想添加一些内容,Hibernate提供了一个不能用于多服务器环境的本地InProc缓存。所以在高峰负载时间内,如果响应时间不理想,并且您认为性能是问题,则最好使用2级高速缓存。因为它允许使用NHibernate的应用程序扩展到多服务器环境,并且还可以消除任何数据库瓶颈。请阅读以下文章以获得进一步参考,尽管它关于NHibernate(.NET),但它将解释L1和L2缓存的概念。

Secondary Level cache, Taking performance ot the next level

可以使用NCache作为第二级缓存,因为它现在是Java和.NET应用程序完全兼容。 干杯