2011-11-20 2 views
0

저는 장고로 작성된 응용 프로그램으로 확장하고자하는 기존 시스템을 보유하고 있습니다. 이 시스템은 동일한 서버에서 수백 개의 작은 웹 사이트를 호스팅합니다. Mysql 서버가 데이터를 처리합니다. 각 웹 사이트는 동일한 테이블 구조를 가진 자체 Mysql 데이터베이스 (호스트 이름에서 파생 된 이름)를 가지고 있습니다. 모든 사이트 목록 (호스트 이름 및 데이터베이스 이름)은 별도의 데이터베이스에있는 테이블에서 관리됩니다.Django로 수백 개의 동일한 데이터베이스를 처리하는 방법은 무엇입니까?

Django 사용자/세션 테이블이나 Django 관리 모듈이 필요하지 않습니다.

장고 코드를 작성하는 것이 가능 그래서 :

  1. 각 MySQL의 쿼리 (궁극적으로 요청의 Host 헤더 기준) 올바른 데이터베이스 이름 난 호스트 이름 목록을 하드 코딩 할 필요가 없습니다
  2. 를 가져옵니다 예. settings.py. 웹 사이트가 추가되거나 이름이 바뀌면 모든 것이 "잘 작동합니다"(또는 어쩌면 사이트 목록을 다시로드하라는 신호를 보낼 수 있습니다).
+1

이 문서에서는 어떻게 수행 할 수 있는지 설명합니다. 그것은 읽을만한 가치가 있습니다 : http://blog.uysrc.com/2011/03/23/serving-multiple-sites-with-django/. – alexn

답변

1

Django spports multi-db 즉, 단일 프로젝트에서 둘 이상의 DB를 사용할 수 있습니다.

Documentation is here.

한편, 두 번째 필요성은 간단한 방법으로 가능하지 않을 수 있습니다. 어쨌든, settings.py 파일에 새로운 DB 설명을 추가해야합니다. 이 문제를 해결하는 한 가지 방법이 있지만 어떤면에서는 좋은 방법이 아닙니다 ...

웹 페이지와 같은 UI 인터페이스에서 새 웹 사이트를 정의 할 때 열려는 스크립트를 작성할 수 있습니다 settings.py 그리고 새로운 데이터베이스 정보를 DATABASE 스키마에 추가하고 저장하고 설정을 새로 고침하십시오.하지만 제가 말했듯이 settings.py을 프로그램 적으로 작성하는 것은 위험합니다.

+1

응용 프로그램에서'settings.py'에 쓰기 만해도 위험하지 않습니다. 여러 요청이있을 경우 올바르게 진행하기가 정말 어렵습니다. 한 번에 파일의 각 덮어 쓰기 부분에서 두 개의 동시 요청을 방지하기 위해 일종의 잠금 메커니즘이 필요합니다. 또한 각 요청에 대한 오버 헤드 비용을 지불하게됩니다. 그 골목을 내려가려면 더 나은 방법은 관리 명령에서'settings.py' 파일을 편집하고 각 사이트에 대해 *를 * 실행하는 것입니다. –

관련 문제