Динамические соединения с базой данных по запросу в Django - PullRequest
1 голос
/ 21 июля 2011

Я создаю централизованное приложение django, которое будет взаимодействовать с динамическим числом баз данных с практически идентичной схемой. Эти базы данных также используются парой устаревших приложений, некоторые из которых на PHP. Нашим решением избежать нескольких хранилищ учетных данных БД является сохранение этой информации в общих установочных файлах вне соответствующих приложений. Файлы настроек могут быть созданы, изменены или удалены без перезапуска приложения django.

Для каждого запроса к приложению django будет заголовок http или параметр url, который можно использовать для определения того, какой файл настроек следует просмотреть, чтобы определить, какие учетные данные базы данных использовать.

Моя первая мысль - использовать специальное промежуточное ПО django, которое будет анализировать файлы настроек (возможно, с кэшированием) и создавать новый объект соединения при каждом запросе, исправляя его в django.db перед любой операцией ORM.

Есть ли более изящный способ справиться с этой ситуацией? Есть ли какие-либо проблемы с безопасностью потоков, которые я должен рассмотреть с помощью промежуточного программного обеспечения?

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

перечитывание файла - это тяжелое наказание, если он вряд ли изменился.

Мой обычный подход - использовать INotify для отслеживания изменений файла конфигурации, а не пытаться читать файл на каждомзапрос.Кроме того, я склонен сохранять «текущую» конфигурацию, анализировать ее из файла и заменять ее новым значением только после того, как я закончу анализ файла конфигурации и уверен, что она действительна.Вы можете решить некоторые проблемы безопасности потоков, установив текущую конфигурацию для каждого входящего запроса, чтобы конфигурация не могла измениться в середине запроса.

0 голосов
/ 21 июля 2011

Вы можете запустить разные экземпляры с разными файлами settings.py (установив разные DJANGO_SETTINGS_MODULE) на разных портах и ​​перенаправить запросы в определенные приложения.Просто мои 2 цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...