java - 正确建模数据库中的历史记录

标签 java database hibernate scala orm

在我的应用程序中,我有一组在整个应用程序生命周期中保持 Activity 状态的对象,我需要创建它们的历史数据库。

这些对象是使用 Hibernate 注释进行注释的 Java/Scala 类层次结构的实例,我在应用程序中使用 Hibernate 注释来在启动时加载它们。幸运的是,所有类都已经包含时间戳,这意味着我不需要更改对象模型就能够创建历史记录。

最合适的方法是什么:

  1. 使用不带注解的 Hibernate 并提供外部 xml 映射,这与除主键之外的注解相同(现在是由之前的主键 + 时间戳组成的复合键)

  2. 使用其他类来记录历史记录(这听起来很复杂,因为我确实有一个类的层次结构,而不是单个类,并且我必须为每种类型的记录子类化我的 HistoricalRecordClass,因为我想重新构建它)。还是用Hibernate

  3. 使用完全不同的方法(请注意,我不喜欢 ORMS,这只是为了方便)

一些注意事项:

存储历史记录的目标是用户可以通过单个 GUI,仅通过指定日期来访问某些数据的实时值或历史值。

最佳答案

您打算如何使用历史记录?最简单的解决方案是将它们序列化为 JSON 并将它们记录到文件中。

我从未将 hibernate xml 映射与 hibernate 注释结合起来,但如果它有效,听起来比携带两个并行对象模型更有吸引力。

如果您需要能够在任何时间点重新创建应用程序状态,那么您或多或少都会陷入将它们写入数据库的困境(因为快速随机访问)。您可以作弊并拥有一个“历史记录”表,该表具有 id + 时间戳 + 类型的复合键,然后是一个“json”字段,您只需在其中整理并保存它。这将有助于 a) 携带一个历史表而不是一堆克隆表,b) 如果架构发生变化,则为您提供一些灵 active (即利用 JSON 的开放架构性质)

但由于它是具有不同使用模式的存档数据(您只是读取/写入整个记录),因此我会考虑使用其他一些存储方式,而不是使用与实时数据相同的严格架构。

这是“一次编写”范式的一个很好的应用...您有可用的 Hadoop 吗? ;)

关于java - 正确建模数据库中的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14229965/

相关文章:

java - Android/Jackson ObjectMapper 垃圾邮件日志包含 "Unable to resolve java.lang.Class<...> annotation class ..."

c# - 代码没有错误,但是从数据库中检索到的数据没有显示在列表框中

java - 基于几乎所有列进行查询时如何最有效地访问表?

java - Tomcat JNDI PSQLException : This connection has been closed

java - Spring 事务 xml 模式

java - 使用java itext或pdfbox在现有pdf中添加便笺

java - 控制结构,重复练习: How to get the sum of the digits of a number?

java -/opt/IBM/WebSphere/AppServer/java/bin/java : No such file or directory

database - RedGate ReadyRoll MySQL 支持吗?

java - 以最有效的方式从数据库中获取大量数据