Postgresql表分区Django项目

arc*_*ane 7 django postgresql partitioning

我有一个使用Postgres 9.3的Django 1.7项目.我有一张会有相当高音量的桌子.该表每月将有1300万到4000万新行.

我想知道将Postgres表分区与Django合并的最佳方法是什么?

ram*_*sus 14

您可以将Architect应用程序用于Postgresql表分区Django项目

PostgreSQL在Architect中的分区实现完全在数据库级别完成.这意味着Architect会创建多个触发器和函数并将它们直接插入到数据库中,因此即使您从数据库控制台而不是从ORM发出直接insert语句,一切都将按预期工作,并且记录将插入到正确的分区中,如果分区不存在,它将自动为您创建.也可以按任何顺序创建分区,而不仅仅是从低到高.

它是旧版Django DB Parti应用程序的新版本


kha*_*son 6

只要你使用继承,然后只将父表连接到你的Django模型,分区应该对Django完全透明.也就是说SELECT,除非ONLY明确使用关键字(如果适用),否则父表上的a 将级联到分区.

请注意,分区确实增加了复杂性,需要实现确定何时需要创建新分区的编程方法,然后创建它们 - 或者以特定间隔手动执行此操作.根据您的确切数据和业务逻辑,您很可能还需要实现触发器规则来确定将INSERT某个分区放入(因为您不希望INSERT进入父表).但是,这些也应该从Django中提取出来.

我发现,根据具体情况,可能需要关闭主应用程序,以免新分区创建导致死锁.

也是值得考虑的是,是否需要它随着时间的推移产生真正的分区,或者如果,一个继承模型说,表格foofoo_archive就足够了,其中foo_archive来自继承foo,并定期的东西(如脚本)较旧的数据移动到foo_archive保持foo较小.