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
关键字(如果适用)。
请注意,分区确实增加了复杂性,因为需要实现一种确定何时需要创建新分区的编程方法,然后创建它们——或者以特定的时间间隔手动执行此操作。根据您的确切数据和业务逻辑,您很可能还需要实施 triggers 和 rules 来确定哪个分区,比如说, INSERT
一些东西进入(因为你不想 INSERT
进入父 table)。然而,这些也应该从 Django 中抽象出来。
我发现,根据具体情况,这可能需要在您的主要应用程序关闭时完成,以免创建新分区导致死锁。
还值得考虑的是,您是否需要随着时间的推移创建真正的分区,或者如果继承模型,例如 tables foo
和 foo_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.
我有一个使用 Postgres 9.3 的 Django 1.7 项目。我有一个 table,音量会很大。 table 每月将有 1300 万到 4000 万个新行。
我想知道将 Postgres table 分区与 Django 合并的最佳方法是什么?
只要你使用 inheritance,然后只将父 table 连接到你的 Django 模型,分区应该对 Django。也就是说,父 table 上的 SELECT
将级联到分区,除非明确使用 ONLY
关键字(如果适用)。
请注意,分区确实增加了复杂性,因为需要实现一种确定何时需要创建新分区的编程方法,然后创建它们——或者以特定的时间间隔手动执行此操作。根据您的确切数据和业务逻辑,您很可能还需要实施 triggers 和 rules 来确定哪个分区,比如说, INSERT
一些东西进入(因为你不想 INSERT
进入父 table)。然而,这些也应该从 Django 中抽象出来。
我发现,根据具体情况,这可能需要在您的主要应用程序关闭时完成,以免创建新分区导致死锁。
还值得考虑的是,您是否需要随着时间的推移创建真正的分区,或者如果继承模型,例如 tables foo
和 foo_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.