我有一个使用Postgres 9.3的Django 1.7项目。我有一张会有相当高音量的桌子。该表每月将有1300万到4000万新行。
我想知道将Postgres表分区与Django合并的最佳方法是什么?
答案 0 :(得分:11)
您可以使用Architect申请Postgresql Table Partitioning Django Project
的新版本PostgreSQL在Architect中的分区实现纯粹是完成的 在数据库级别。这意味着Architect会创建几个 触发器和函数,并将它们直接插入数据库,所以 即使您从数据库控制台发出直接插入语句和 不是来自ORM,一切都将按预期工作,记录将是 插入正确的分区,如果分区不存在,它 将自动为您创建。也可以创建分区 以任何顺序,而不仅仅是从低到高。
答案 1 :(得分:5)
只要您使用inheritance,然后只将父表连接到 Django 模型,分区就应该对 Django 完全透明。也就是说,父表上的SELECT
将级联到分区,除非明确使用ONLY
关键字(如果适用)。
请注意,在需要实现确定何时需要创建新分区的编程方法,然后创建它们 - 或者以特定间隔手动执行此操作时,分区确实增加了复杂性。根据您的确切数据和业务逻辑,很可能您还需要实现触发器和规则以确定哪个分区,例如INSERT
into(因为你不希望INSERT
进入父表。这些也应该从 Django 中抽象出来。
我发现,根据具体情况,这可能需要在关闭主应用程序时完成,以免创建新分区导致死锁。
另外值得考虑的是,您是否需要随时间创建的真正分区,或者表格foo
和foo_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扩展。