Я сейчас работаю над схемой шардинга Django.
Я посмотрел на роутер Django, но решил свернуть свой.
некоторые мысли по вашей проблеме:
- Одна идея состоит в том, чтобы использовать одну базу данных, а затем копировать соответствующие данные с помощью сигналов Django при сохранении.
что-то вроде--
import settings.databases as dbs_list
def post_save_function(UserModel):
for db in dbs_list:
UserModel.save(using=db,force_insert=True)
сохранение пользовательских объектов (по крайней мере, в модели с одной БД), по-видимому, сохраняет данные сеанса, аутентификации и т. Д. Под колпаком с помощью различных магий, происходящих внутри django.contrib, поэтому есть вероятность, что вам, возможно, не придется заходить и выяснить имена и типы всех этих таблиц базы данных.
в поддержку возможности этой работы, я клянусь, я где-то недавно читал (вероятно, в одном из сообщений в блоге Алекса Гейнора), что, если у объекта есть внешний ключ, Django попытается использовать ту же БД, на которой он живет (для очевидные причины в свете того, как обычно работает Джанго).
- другая идея:
из примера на странице Django multiDB, на которую вы ссылались, мне интересно, сработает ли что-то вроде следующего:
их пример кода:
def allow_syncdb(self, db, model):
"Explicitly put all models on all databases."
return True
возможная модификация:
def allow_syncdb (self, db, model):
if isinstance(model,User):
return True
elif isinstance(model,Session):
return True
else:
''' something appropriate --
whatever your sharding schema is for other objects '''
Если посмотреть еще раз, этот код, вероятно, будет более полезен как функция "db_for_write". но вы поняли.
нет никаких сомнений в том, что другие типы моделей, которые вы должны были бы добавить, чтобы сделать эту работу (все, что является подлинным, обширно).
удачи! Надеюсь, это поможет вам.
Мне интересны ваши выводы и комментарии!
ДБ