我是Django的新手,对PgSQL的使用不是很丰富。我需要创建一个包含约10个字段的表。问题是我不断更改每个项目,并且需要保留每个字段的更改历史记录。现在,我为此找到了几种解决方案,但我很担心:
1)https://github.com/arkhipov/temporal_tables
DB和触发器上的继电器。担心的是,历史记录保存在另一个表中,因此,每更改1个字段,它将创建一个具有9个剩余字段的新历史记录,我打算按字段而不是按项目显示历史记录,因此数据量将增长9倍没有目的的更快。还是DB会优化它?此外,还有自然只有开/关日期时间历史记录的图像。
2)https://github.com/treyhunner/django-simple-history
比起第一个要好,因为它已与Django集成。还具有很多功能,例如自定义history_date(我已经在文件中包含很多快照)。但仍然与1
相同3)手动创建带有ID的主表,并为每个字段创建关系表。看起来像一场噩梦般的管理。另外,需要执行很多连接才能获取当前的完整记录(Django可以与VIEW一起使用吗?)
那么您能提出更好的解决方案吗?还是我对大量剩余数据的想法是错误的,我应该不再打扰了?
答案 0 :(得分:0)
通常PG可以很好地优化性能。
这实际上取决于您将存储多少数据。但是,您不能为每行 而不是每个字段所做的每个更改制作一张额外的表格吗?这样做对您有什么影响?
但是,您也可以持久保留历史。例如,仅存储每个字段的最后3个版本。这将最大程度地减少您的数据,但是您需要通过代码进行管理或进行触发/过程。除此之外,如果有一天想检索它,您总是可以进行备份并存储在本地/云中。
如果您坚持使用每个字段的记录作为第一个选择,我建议您使用django集成,但这取决于您。