2012-09-27 2 views
0

모델을 복제하여 주요 django 프로젝트의 무거운 프로세스를 다른 django 프로젝트로 가져 가고 싶습니다.두 Django 프로젝트 간 모델 (및 테이블) 공유

이것은 데이터베이스 테이블의 공유를 의미합니다. 표가 공유되는 방식을 설명하는 다이어그램은 다음과 같습니다. 번호가 매겨진 화살표를 따라 정보 흐름을 상상해보십시오.

http://i.imgur.com/kOdeq.png

인터페이스 프로젝트는 퍼즐의 사용자 상호 작용의 일부는 입력 및 출력을 처리하고, 사용자가 해결할 싶은 어떤 문제를 정의한다. SOLVE 프로젝트는 무거운 사용자 정의 문제를 해결하고 준비가되면 인터페이스를 읽을 수있는 자체 테이블에 솔루션을 레코드로 저장하고 INTERFACE는 다시 사용자에게 제공합니다.

두 개의 ORM 동기화와 관련하여 어떤 종류의 경고가 있습니까? 이것도 좋은 생각입니까?

답변

1

즉, 작업 대기열을 다시 작성하고 있습니까?

즉 인터페이스는 "do this for me"를 나타내는 레코드를 삽입하고 나중에 "this was done for"테이블 (또는 같은 테이블이 중요하지 않음) 형식을 검색합니다.

당신이 정말로 찾고있는 것은 일종의 원격 비동기 rpc 호출 인터페이스입니다. 예를 들어, 당신이 이런 식으로 재건 할 수 있다면, 그렇습니다.

나는 샐러리를 재평가하는 것을 여전히 권할 것이다. 나는 여러 차례에 걸쳐 그것을 해왔다. 그러나 나는 그것을 설정 했으므로 이전에 그것을 사용하지 않았다는 것을 충격을 준다. 장고 DB를 메시지 대기열 백엔드로 사용할 수도 있습니다 (저 볼륨 사이트에 대해서만 말하지만).

어쨌든, 특정 질문에 같이

같은 DB 테이블과 장고도 당신의 DB 커넥터도이 점에 추가적인 제약 조건을 추가합니다를 사용하여 두 개의 독립적 인 프로세스와 더 상속 문제는 없습니다.

정기적으로 DB를 폴링하여 수행 할 작업을 찾거나 메시지 (힌트 : 셀러리!)를 보내려면 작업자 프로세스 ("해결")가 필요합니다. ui 클라이언트 ("인터페이스")는 사용자가 새로 고침 할 때 DB를 확인할 수 있습니다.

구현 관점에서 보았을 때 두 프로젝트에서 코드를 완전히 공유하는 것이 가장 쉽습니다 (모든 모델, 뷰 등). 하나의 프로세스가 ui 웹 서버를 정상적인 방법으로 시작하게하고 작업자는 사용자 정의 관리 명령을 연결하는 것이 작업자의 루프를 시작하는 가장 간단한 방법 일 것입니다.

행에 쓸 때 select_for_update을 사용하지 않으면 db locking/race 조건에 약간의 문제가 발생할 수 있습니다. 또는 경쟁을 피하기 위해 .save(update_fields=zzz)을 사용할 수 있지만 1.5에 불과합니다.

+0

정말 내 머리 속에 django-db를 대기열로 사용할 수 있습니다. 감사! – sdkfasldf

관련 문제