2011-07-29 2 views
3

분할 데이터베이스에 대한 질문이 있습니다. 문제의 쿼리는 다음과 같습니다.분할 MySQL 데이터베이스

SELECT COUNT(*) FROM monies.link_monies_new lcn ' 
     . 'INNER JOIN products.link l ON lcn.link_id = l.link_id ' 
     . 'INNER JOIN products.products_format af ON l.product_format_id = af.product_format_id ' 
     . 'INNER JOIN products.products_categories ac ON af.product_category_id = ac.product_category_id ' 
     . 'WHERE lcn.click_time BETWEEN FROM_UNIXTIME(1311721200) AND FROM_UNIXTIME(1311807600) ' 
     . 'AND ac.product_category_id = 1 

문제는 데이터베이스와 제품이 다른 서버에 있다는 것입니다. 해결 방안은 무엇인가? 두 개의 쿼리가 필요합니까? 나는 조금 길다.

감사합니다. 나는 당신의 질문을 이해 한 경우

답변

4

http://dev.mysql.com/doc/refman/5.0/en/federated-use.html

제대로, 당신은이 데이터베이스간에 테이블을 조인하는 쿼리를 갖고 싶어하고, 데이터베이스는 별도의 서버에 위치합니다.

"monies"서버에서 쿼리를 실행한다고 가정하면 monies 서버에서 "products"서버를 가리키는 연합 테이블을 생성합니다. 그렇게하면 쿼리가 계속 작동하며 MySQL은 물리적으로 별도의 서버에 있다는 사실을 마술처럼 관리합니다.

성능 조정은 문제가 될 수 있지만 쿼리가 현재와 동일하게 유지되는 가장 간단한 방법입니다.

예를 들어 "제품"이라는 "monies"서버에서 로컬 데이터베이스를 만들 수 있습니다. 제품 내에서 "링크"테이블을 만들 수 있습니다.

CREATE TABLE link (
    link_id  INT(20) NOT NULL AUTO_INCREMENT, 
    ....<<other columns from the link table>> 
    PRIMARY KEY (link_id) 
) 
ENGINE=FEDERATED 

CONNECTION='mysql://[email protected]_server:9306/products/link'; 

그런 다음 아무 것도 변경하지 않고 위 쿼리를 실행할 수 있습니다.

+0

답변 해 주셔서 대단히 감사합니다.하지만 테이블이 이미 만들어져 있으며 수백 개의 테이블이있는 큰 시스템이며 그 옵션이 없습니다. – luqita

+0

어떻게 할 수 있습니까? 현재 테이블을 연합으로 변경해야합니까? 나는이 작업이 복잡하더라도 MySQL에 대한 약간의 멍청하다. 감사! – luqita

+0

페더레이션 된 테이블을 미리 구현할 수 있도록 새 서버로 이동할 때 데이터를 마이그레이션해야합니다. –