2012-09-11 2 views
2

짧은 이야기 - 기본 사용자 세부 정보 (userid (색인), 사용자 이름, 암호, 상위 사용자, 상태)가 하나의 데이터베이스 및 확장 사용자에 저장되는 largish 데이터베이스를 다루고 있습니다. 세부 사항 (동일한 userid (색인), 성명, 주소 등)은 다른 서버의 다른 데이터베이스에 저장됩니다.MySQL 연합 스토리지 엔진 대 복제 (성능)

확장 사용자 세부 정보 필드의 전체 이름순으로 정렬 된 특정 사용자가 소유 한 모든 사용자를 (기본 사용자 세부 정보 데이터베이스의 상위 사용자 필드를 통해) 선택하는 쿼리를 수행해야합니다. 시간 (수천, 어쩌면 수만명이 한 사용자에게).

내가 해결할 수있는 한 세 가지 가능한 솔루션이 있습니다.

  1. 아니오 JOIN - 하나의 쿼리에서 모든 사용자 ID를 가져 와서 해당 ID를 기반으로 두 번째 쿼리를 실행하십시오. 사용자 ID의 수가 너무 많아서 최대 쿼리 길이를 초과하거나 끔찍하게 비효율적 일 수 있다는 점을 제외하고는 괜찮습니다. 내가 할 수

  2. 는 2

과 같은 결과를 얻을 수

  • 사용을 페더 레이 티드 스토리지 엔진 테이블을 가입 확장 된 세부 사항을 서버에 기본 사용자 세부 데이터베이스 테이블을 복제

    3이 가장 좋은 옵션이지만 성능에 대한 정보를 거의 찾을 수 없었으며 프로덕션 데이터베이스에서이 정보를 사용하는 데주의해야한다는 의견도있었습니다.

    최상의 구현 방법에 대한 의견을 보내 주시면 감사하겠습니다.

    감사합니다.

  • 답변

    2

    페더레이션 엔진의 성능 또는 제한 사항에 대해서는 limitations이 많이 있습니다. 트랜잭션을 지원하지 않습니다. 대량 삽입을 수행 할 때 FEDERATED 테이블의 성능은 다른 테이블 유형과 비교할 때 느립니다.

    Replication 및 페더레이션 엔진은 동일한 작업을 수행하기위한 것이 아닙니다. 우선, 둘 다 시도 했습니까?

    2

    FEDERATED 테이블은 좋은 기능이지만 인덱스를 지원하지 않으므로 응용 프로그램이 크게 저하됩니다.

    (!) 사용자가 원격 서버의 사용자 데이터베이스에서 읽기만하는 경우. 복제가 더 효과적이고 빠릅니다.

    관련 문제