本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在数据库中正确建模历史记录

发布于2025-01-18 21:43     阅读(868)     评论(0)     点赞(18)     收藏(1)


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

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

最合适的方法是什么:

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

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

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

一些注意事项:

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


解决方案


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

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

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

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

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



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/695226/d380a344c432a814db55/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)