Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2013 09:45:28

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Собственно, есть задача примерно следующего содержания:
есть модель А с полями:

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) есть ли какие-либо открытые приложения, на которые можно было бы посмотреть, дабы сократить время и варианты в своем велосипедостроении?



Офлайн

#2 Июль 16, 2013 11:08:27

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Рекомендую
Используется код Django и South.
Не уверен что полностью подойдет для данной задачи, но глянуть стоит.

Офлайн

#3 Июль 16, 2013 12:50:46

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Динамическое создание моделей

ИХМО Руки за такое отрывать надо.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Июль 16, 2013 12:59:11

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Rodegast
Поддерживаю. Потом такой код обалденно читать и править…



Офлайн

#5 Июль 16, 2013 15:45:29

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Rodegast
4kpt
кроме эмоций будут какие-то доводы?



Офлайн

#6 Июль 16, 2013 16:01:35

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Побойтесь бога, какие эмоции :)

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

Динамическое создание модели (соответсвенно и таблиц, прямо несвязанных с кодом модели), обновление базы без перезагрузки приложения - вас самого ничего не смущает в Вашем подходе?



Отредактировано 4kpt (Июль 16, 2013 16:08:48)

Офлайн

#7 Июль 16, 2013 16:05:10

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Динамическое создание моделей

а что с кодом не так? почему сложно читать и править?



Офлайн

#8 Июль 16, 2013 16:24:12

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Динамическое создание моделей

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тыс. строк.
Т.е. количество строк данных составляет от десятка миллионов до нескольких миллиардов строк.



Отредактировано Dr.Livsi (Июль 16, 2013 16:39:37)

Офлайн

#9 Июль 16, 2013 16:47:10

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Динамическое создание моделей

Вы таким образом хотите снять нагрузку с базы?



Офлайн

#10 Июль 16, 2013 16:49:45

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Динамическое создание моделей

да



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version