Postgresql表分区Django项目

时间:2015-06-01 00:45:24

标签: django postgresql partitioning

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

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

3 个答案:

答案 0 :(得分:11)

您可以使用Architect申请Postgresql Table Partitioning Django Project

  

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

这是旧Django DB Parti application

的新版本

答案 1 :(得分:5)

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

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

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

另外值得考虑的是,您是否需要随时间创建的真正分区,或者表格foofoo_archive的继承模型是否足够,foo_archive继承自foo foo_archive,并定期将某些内容(例如脚本)移至foo以保持~/Library/Application Support/Sublime Text 2/Packages/User/更小。

答案 2 :(得分:0)

如果您使用的是PostgreSQL的较新版本,可以尝试一下

https://github.com/chaitin/django-pg-timepart

  

实现PostgreSQL表以基于日期进行分区和管理的Django扩展。