java - 关于 Java 中的数据库设计方法的问题

标签 java database jakarta-ee

我在具有层次关系(可以表示为树)的数据库中有数据。
现在,每当服务器收到请求时,都会在数据库中进行递归查询以创建内存列表(这是树的一个分支,从实际存在的叶到根)和 使用该列表进行处理。
这不是很有效,但至少它现在可以工作,并且优点是如果数据库发生变化,变化会立即被注意到。
无论如何,我想改进它并寻找一种模式来:
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/

相关文章:

python - 使用 pyodbc 创建数据库

jakarta-ee - 使用 Apache Commons FileupLoad 和 Spring MVC 删除上传的文件

java - 为什么我的八进制到十进制转换器在某些情况下不起作用?

java - 是否可以缩短方法的参数?

java - 从 char : possible lossy conversion int to char 中减去 int

Java EE 6 程序安全性、glassfish 和 JDBC 领域

Java 线程上下文类加载器 - 它是如何工作的?

java - 是否可以限制 JavaDocs 生成中的特定属性/字段?

sql - 如何在 Liquibase 中实现 SQL 语句(插入多行)

用于 HyperTable 的 C# 库