我在具有层次关系(可以表示为树)的数据库中有数据。
现在,每当服务器收到请求时,都会在数据库中进行递归查询以创建内存列表(这是树的一个分支,从实际存在的叶到根)和
使用该列表进行处理。
这不是很有效,但至少它现在可以工作,并且优点是如果数据库发生变化,变化会立即被注意到。
无论如何,我想改进它并寻找一种模式来:
1)不必一直访问数据库
2)如果在数据库中进行了更改,它会立即反射(reflect)
3)可以在服务器的所有地方使用。
是否有通常用于此类情况的标准设计模式?或者只是让后端线程维护一个数据结构,并在数据库中进行任何更新时,重新加载数据结构中的所有内容?
谢谢
最佳答案
您可以使用缓存解决方案来代替线程。查询的结果将被缓存并在每次请求时返回,如果查询中的任何表被修改,您会使缓存无效,等到下一个请求检索新值并将它们加载到缓存中。该解决方案满足条件1和2。“它可以在服务器的所有地方使用”是什么意思?
如果您使用的是 Hibernate,这可以通过 second level cache 轻松完成。 ,需要注意的是,您必须保证只有您的应用程序更改数据库(没有外部进程)。
如果您不使用 Hibernate,您可以使用 Ehcache 推出您自己的解决方案.您需要更改返回结构的方法以在查询数据库之前检查缓存。对涉及的表进行更改的方法必须修改以使缓存无效。
Ehcache 还有integration with Spring ,但我从未尝试过。
关于java - 关于 Java 中的数据库设计方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245620/