代码之家  ›  专栏  ›  技术社区  ›  Aaron Palmer

如何最好地处理历史数据的存储?

  •  12
  • Aaron Palmer  · 技术社区  · 17 年前

    我试图确定如何存储历史事务数据。

    我是否应该将其存储在一个表中,在该表中记录每次都被重新插入一个新的时间戳?

    我是否应该将历史数据拆分为单独的“历史”表,并仅将当前数据保留在“活动”表中。

    如果是的话,我如何才能做到最好?是否具有自动将数据复制到历史记录表的触发器?还是在我的应用程序中使用逻辑?

    将有大量的历史数据(数十万行,最终可能有数百万行)

    主要搜索和报告操作将在历史数据上运行。

    2 回复  |  直到 17 年前
        1
  •  11
  •   ConcernedOfTunbridgeWells    17 年前

    如果要求仅用于报告,请考虑建立单独的数据仓库。这使您可以使用数据结构,如缓慢变化的维度,这些数据结构对于历史报告来说更好,但在事务性系统中却不能很好地工作。由此产生的组合还将历史报告从生产数据库中移出,这将是性能和维护的胜利。

    真正地 需要这样做,因为这会增加很多复杂性。制作一个能够正确重建历史状态的事务性应用程序比看起来要困难得多。金融软件(如保险核保系统)在这方面的失败远远超出您的想象。

    如果您需要仅用于审计日志记录的历史记录,请创建阴影表和审计日志触发器。这比在应用程序中正确全面地实现审计日志记录要简单得多,也更健壮。触发器还将从应用程序外部的源获取对数据库的更改。

        2
  •  2
  •   MarlonRibunal    17 年前

    这个问题符合业务逻辑。首先了解您的业务需求,然后从那里开始。对于这种情况,数据仓库是一个很好的解决方案。ETL将为您提供处理数据流的许多选项。你关于“历史”与“活动”的基本概念是非常正确的。如果您的历史数据与所有维度和事实表一起保存在数据仓库中,那么它将更加高效和灵活。

    推荐文章