Postgresql Table 分区 Django 项目

Postgresql Table Partitioning Django Project

我有一个使用 Postgres 9.3 的 Django 1.7 项目。我有一个 table,音量会很大。 table 每月将有 1300 万到 4000 万个新行。

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

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

请注意,分区确实增加了复杂性,因为需要实现一种确定何时需要创建新分区的编程方法,然后创建它们——或者以特定的时间间隔手动执行此操作。根据您的确切数据和业务逻辑,您很可能还需要实施 triggersrules 来确定哪个分区,比如说, INSERT 一些东西进入(因为你不想 INSERT 进入父 table)。然而,这些也应该从 Django 中抽象出来。

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

还值得考虑的是,您是否需要随着时间的推移创建真正的分区,或者如果继承模型,例如 tables foofoo_archive 就足够了,其中foo_archive 继承自 foo,并定期将旧数据(例如脚本)移至 foo_archive 以保持 foo 更小。

您可以使用Architect application for Postgresql Table Partitioning Django Project

PostgreSQL’s partitioning implementation in Architect is done purely at the database level. That means that Architect creates several triggers and functions and inserts them directly into the database, so even if you issue direct insert statement from database console and not from the ORM, everything will work as expected and record will be inserted into the correct partition, if partition doesn’t exist, it will be created for you automatically. Also partitions may be created in any order and not only from lower to higher.

这是旧版本的新版本Django DB Parti application

如果您使用的是较新版本的 PostgreSQL,您可以试试这个

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

A Django extension that implements PostgreSQL tables for partitioning and management based on dates.