5

我有一个包含 200 个表的应用程序 - 分为 4 组

  1. 非事务性(50 个表)- 诸如部门、名称等表,有时由管理员更新一次(100000 次读取:1 次写入率和 1 次写入/月)

  2. 较少事务(50 个表)- 诸如设置、产品、税率之类的表读取更多,插入频率很低,但每天都会发生写入(1000 次读取:1 次写入率和 1 次写入/天)

  3. 事务性(50 个表)- 订单、收据等表,写入和读取几乎相同(10 次读取:1 次写入和 1 次写入/小时)

  4. 繁重事务(50 个表)- 任务、历史记录等表,这些表写得更多,读得更少,但被服务和报告使用(1 次读取:1 次写入和 1 次写入/分钟)

我正在使用 hibernate、struts2 和 spring 并寻找缓存策略以获得最佳性能和效率。

如果您观察到我在写入和读取最多的表中有更多数据,因此将它们缓存在更关键的位置。

我可以缓存第 4 组表吗?如果是怎么办?

我可以缓存第 3 组表吗?如果是怎么办?

我可以缓存第 2 组表吗?如果是怎么办?

我可以缓存第 1 组表吗?如果是怎么办?

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

在某些情况下视图会帮助我吗?哪些情况?

好吧,我最终想要的是从内存数据库中快速读取访问,一些东西会随着数据库的变化而更新我的内存数据库。比如说我有产品列表,内存中有订单列表,但是当添加任何新产品或订单时,这个列表必须重新加载。通常,所有读取都从某个内存数据库中读取,而所有写入直接 db 并带有触发器以更新列表或列表项。

4

2 回答 2

4

让我们从缓存的经验法则开始,

缓存频繁读取且很少更改的非事务性数据

Hibernate 可以让你非常安全地到达那里。从这一点开始,即使您仍然可以使用缓存,但实际上并不推荐它,因为您可能会遇到多个问题。因此,最好谨慎行事。看看下面的文章列表,它会给你更多的洞察力。

  1. Hibernate:真正了解二级缓存和查询缓存
  2. 理解 Hibernate 中的缓存——二级缓存
  3. 提高 Hibernate 的性能

因此,当我们将此规则应用于您的场景时,只有第一组应该被缓存。首先,测量您的应用程序以提高性能。如果一切顺利,您也可以考虑缓存第二组。不建议缓存事务表,因此排除了集合 3 和 4。

于 2012-04-18T12:46:39.323 回答
1

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

二级缓存,性能更上一层楼

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

于 2012-05-16T09:54:21.193 回答