首页 > 解决方案 > PgSQL,Django - 具有许多字段的表的历史记录 - 如何正确组织?

问题描述

我是 Django 新手,对 PgSQL 不是很有经验。我需要创建一个包含大约 10 个字段的表。问题是我不断更改的每个项目,我需要保留每个字段的更改历史记录。目前,我为此目的找到了几种解决方案,但我担心:

1) https://github.com/arkhipov/temporal_tables

数据库和触发器上的继电器。问题是历史记录保存在一个额外的单个表中,因此每次更改 1 个字段时,它将创建一个包含 9 个剩余字段的新历史记录,我打算显示每个字段的历史记录,而不是每个项目,因此数据量将增长 9 倍没有目的的更快。还是DB会优化它?此外,还有图像,自然只有开/关日期时间历史。

2) https://github.com/treyhunner/django-simple-history

比第一个更好,因为它与 Django 集成。还有很多功能,比如自定义历史日期(我在文件中有很多快照)。但还是和1一样的担心

3)手动创建带有ID的主表,并为每个字段制作关系表。看起来像是管理的噩梦。此外,需要执行大量连接才能获得当前的完整记录(Django 可以使用 VIEW 吗?)

那么你能建议更好的解决方案吗?或者也许我对大量剩余数据的想法是错误的,我应该停止打扰?

标签: djangopostgresql

解决方案


通常PG对性能进行了很好的优化。

这实际上取决于您将存储多少数据。但是,您不能为每行而不是每字段所做的每一次更改制作一个附加表吗?这样做有什么影响?

但是,您也可以使用历史的持久性。例如,仅存储每个字段的最后 3 个版本。这将最小化您的数据,但您需要通过代码来管理它,或者制作一个触发器/程序。除此之外,如果您想在某天检索它,您始终可以在本地/云端进行备份和存储。

如果您坚持使用每个字段的记录的第一个选项,我建议使用 django 集成,但这真的取决于您。


推荐阅读