Найти - Пользователи
Полная версия: Динамическое создание моделей
Начало » Django » Динамическое создание моделей
1 2
Dr.Livsi
Собственно, есть задача примерно следующего содержания:
есть модель А с полями:
model A(models.Model):
title = models.CharField()
description = models.CharField()
identifiyer=models.CharField()


model Abstr(models.Model):
data1= models.CharField()
data2= models.CharField()
data3=models.CharField()

class Meta:
abstract = True

Предполагается, что при добавлении нового объекта в модель А, будет вызываться код, который:
1) создасть модель, с наименованием, a.identifiyer, унаследованную от класса Abstr
2) проведет синхронизацию с БД
3) позволит сразу, без перезагрузки кода приложения использовать во вьюхах обращение к свежесозданной модели (по этому пункту сильные сомнения)

Подозреваю, что здесь в любом случае необходимо будет писать бОльшую часть кода самому, без каких-либо сторонних библиотек. Но есть вопросы:
1) Приходилось ли кому-либо реализовывать похожий функционал?
2) С какими проблемами пришлось столкнуться?
3) есть ли какие-либо открытые приложения, на которые можно было бы посмотреть, дабы сократить время и варианты в своем велосипедостроении?
nnmware
Рекомендую
Используется код Django и South.
Не уверен что полностью подойдет для данной задачи, но глянуть стоит.

Rodegast
ИХМО Руки за такое отрывать надо.
4kpt
Rodegast
Поддерживаю. Потом такой код обалденно читать и править…
Dr.Livsi
Rodegast
4kpt
кроме эмоций будут какие-то доводы?
4kpt
Побойтесь бога, какие эмоции :)

Самый простой вопрос. Как по получившемуся коду можно будет понять (хоть приблизительно), какие таблицы существуют в БД?

Динамическое создание модели (соответсвенно и таблиц, прямо несвязанных с кодом модели), обновление базы без перезагрузки приложения - вас самого ничего не смущает в Вашем подходе?
Dr.Livsi
а что с кодом не так? почему сложно читать и править?
Dr.Livsi
4kpt
Динамическое создание модели (соответсвенно и таблиц, прямо несвязанных с кодом модели), обновление базы без перезагрузки приложения - вас самого ничего не смущает в Вашем подходе?
Ну пока я не увидел доводов против.
Собственно, предполагается следующий алгоритм:
при добавлении записи в модель А, в файлик models какого-нибудь приложения dinamic, например, дописывается строчка вида:
class dinamic_id(Abstr):
pass
который, как вы видите, унаследован от абстрактной модели.
Далее осуществляется синхронизация через south.

Собственно, можно было бы стандартным путем:
model A(models.Model):
title = models.CharField()
description = models.CharField()
identifiyer=models.CharField()

model B(models.Model):
a=models.ForeignKey(A)
data1= models.CharField()
data2= models.CharField()
data3=models.CharField()
проблема в том, что предполагается очень серьезная нагрузка на одну эту таблицу (модель B): ежедневный инсерт нескольких десятков миллионов записей. Причем добавление записей не будет равномерно распределено по суткам: 99.9% процентов будут идти в течение получаса-максимум часа. Запись будет осуществляться из нескольких десятков источников. Не из одного.
В общем такая структура (которая выше, с отдельными таблицами) нужна для распараллеливания запросов на вставку данных, дабы не блокировать одну таблицу.
Впрочем, наверное, проблему можно решить организацией очереди на добавление данных.

Еще.
Предполагается создание от нескольких сотен таких моделей, до нескольких десятков тысяч (если проект будет развиваться).
Каждая таблица приблизительно может содержать от 40 до 100тыс. строк.
Т.е. количество строк данных составляет от десятка миллионов до нескольких миллиардов строк.
4kpt
Вы таким образом хотите снять нагрузку с базы?
Dr.Livsi
да
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB