2012-08-30 1 views
1

나는 master와 slave 데이터베이스를 가지고있다. 로드 중 일부의 균형을 맞추기 위해 모든 INSERT/UPDATE 쿼리를 마스터로 보내고 모든 SELECT 쿼리를 슬레이브로 보내려고합니다. 슬레이브로 보낼 수 없으므로 슬레이브로 이동해야합니다. 나는 database.php에 정의 된 데이터베이스를 가지고있다. 내가 설정하고있는 AppModel.php beforeFind() 내부

: 다음 를 BeforeSave() 내부

$this->useDBConfig = 'readOnly'; 

, 내가 설정하고이 내가 전환을하려고하는 방법이다

$this->useDBConfig = 'writeOnly'; 

그러나 더 자세히 살펴보면 useDBConfig가 모델과 데이터베이스 간의 일대일 관계인지 궁금해하고 있습니다. 아마, useDBConfig는 단일 모델을 단일 데이터베이스로 지정하는 것일뿐입니다. 왜냐하면 이것이 항상 기대했던 것처럼 작동하지 않기 때문입니다. 때때로 INSERT/UPDATE는 readOnly 권한으로 readOnly에서 실행하려고 시도하고 실패합니다.

이 경우 해당 CakePHP 응용 프로그램을 변경하여 요청을 적절한 데이터베이스로 보내려면 어떻게해야합니까? 내가 다른 방식으로해야할까요?

답변

1

기본적으로 AppModel의 모든 저장 메소드 (save, saveField, saveAssociated, saveAll, UpdateAll, delete, deleteAll 등)를 덮어 쓰고 두 setDatasource 호출간에 상위 호출을 캡슐화합니다.

+0

너무 좋아요! 나는 이것을 어디에서 시작해야할지 몰랐다. 두 가지 빠른 질문 : 1) 새로운 버전의 CakePHP에서 이것을 시도한 적이 있습니까? 나는 우리가 현재 2.3.7에 있다고 생각한다. 2) 제작/개발 자격 증명은 어떻게 처리합니까? DB 설치 두 가지로 까다로워 지나요? – emersonthis

+0

@Emerson 예. 현재 2.3.7에서 실행 중입니다. 프로덕션/개발 환경에서 도움이 필요한 경우 http://blogchuck.com/2012/08/custom-configurations-for-multi-server-environment-in-cakephp/ –

+0

을 참조하십시오. @ ChuckBurgess : 귀하가 제공 한 게시물에 대한 링크가 만료되었습니다. 링크를 업데이트 할 수 있습니까 ?? –