1

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

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

什么是最合适的方法:

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

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

  3. 使用完全不同的方法(请不要我不喜欢 ORMS,这只是一个方便的问题)

一些考虑:

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

4

1 回答 1

1

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

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

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

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

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

于 2013-01-09T07:20:20.623 回答