2015-06-01 2 views
3

У меня есть проект Django 1.7, который использует Postgres 9.3. У меня есть таблица, которая будет иметь довольно большой объем. Таблица будет иметь от 13 миллионов до 40 миллионов новых строк в месяц.Postgresql Table Partitioning Django Project

Я хотел бы знать, как лучше всего включить разбиение таблиц Postgres на Django?

ответ

5

Пока вы используете inheritance, а затем подключить только родительскую таблицу для вашего Джанго модели, перегородки должны быть полностью прозрачными для Джанго. То есть, SELECT в родительской таблице будет каскадироваться до разделов, если ключевое слово ONLY явно не используется (если применимо).

Обратите внимание, что разметка добавляет сложности с точки зрения необходимости применения программного метода определения, когда необходимо создавать новые разделы, а затем создавать их - или делать это вручную через определенные промежутки времени. В зависимости от ваших точных данных и бизнес-логики, вполне вероятно, что вам также понадобится ввести триггеры и правила, чтобы определить, какой раздел, скажем, INSERT, что-то в (поскольку вы не хотите, чтобы INSERT в родительскую таблицу). Однако их тоже следует отвлечь от Django.

Я обнаружил, что, в зависимости от конкретных обстоятельств, это может потребоваться при отключении основного приложения, так как создание нового раздела вызывает тупик.

Также стоит рассмотреть, нужно ли вам истинные разделы, которые получают созданные в течение долгого времени, или если модель наследования, скажем, таблицы foo и foo_archive хватило бы, где foo_archive унаследован от foo и периодически что-то (например, сценарий) передвигает более старые данные в foo_archive, чтобы сохранить foo меньше.

7

Вы можете использовать Architect приложение для Postgresql Table Partitioning Django Project

реализации секционирования PostgreSQL в Architect делается чисто на уровне базы данных. Это означает, что Architect создает несколько триггеров и функцийи вставляет их непосредственно в базу данных, поэтому , даже если вы выдаете прямую инструкцию вставки из консоли базы данных и не из ORM, все будет работать как ожидалось, и запись будет , вставленная в правильный раздел, если раздел не существует, он автоматически создаст . Также могут быть созданы разделы в любом порядке и не только от более низких до высших.

Это новая версия старого Django DB Parti application