2014-03-25 4 views
0

내 시나리오는 다음과 같습니다.다른 MySQL 데이터베이스에 레코드 배포 - MySQL 프록시 대체

지금은 여러 개의 테이블이있는 하나의 큰 MySQL 데이터베이스를 사용하여 사용자 데이터를 저장하고 있습니다. 많은 테이블에는 자동 증분 열이 있습니다.

두 개 이상의 데이터베이스로 나누고 싶습니다. 배포는 user_id에 의해 수행되어야하며 결정됩니다 (임의화할 수 없음). 예 : 사용자 1과 2는 database1에, user3은 database2에, user4는 database3에 있어야합니다.
전 프론트 엔드를 변경하고 싶지 않으므로 하나의 db 어댑터를 사용하고 쿼리 생성 (프론트 엔드)과 쿼리 실행 (올바른 데이터베이스) 사이에 계층을 추가하고 싶습니다. 이 계층은 user_id를 기반으로 쿼리를 올바른 데이터베이스에 배포해야합니다.

MySQL Proxy 나는 정확히 내가 필요한 것과 비슷하게 들린다. 불행히도 알파 상태이며 프로덕션 환경에서 사용하지 않는 것이 좋습니다.
PHP의 경우 MySQL Native Driver Plugin API이 유망하다고 생각 되나 그렇다면 적어도 PHP java를 지원하는 레이어가 필요합니다.

내 목표를 달성 할 수있는 다른 방법이 있습니까? 감사!

답변

0

이 사이트는 찾고있는 서비스를 제공하는 것 같습니다 (가격에 대한 것).

http://www.sqlparser.com/

그것은 당신이 구문 분석하고 쿼리 및 결과를 수정할 수 있습니다. 그러나 mysql-proxy가 여전히 알파 상태 일지라도 사용자의 요구가 충분히 간단하기 때문에 프록시 만 사용하는 것처럼 보이기 위해 다른 사용자 ID를 구별하기 위해 몇 줄의 코드 만 필요합니다.

또는 user.id 정보를 얻기 위해 사용하는 서버 측 언어를 모두 사용자로 지정할 수 있으며 해당 정보를 기반으로 적절한 데이터베이스에 mysql 연결을 생성 할 수 있습니다. 여기에 함께 phpbled 내가 정신을 당신이 뭘 찾고 있다고 생각하는지 않습니다.

</php 
    // grab user.id from wherever you store it 
    $userID = get_user_id($clientUserName); 
    $userpass = get_user_pass($clientUserName); 

    if ($userID % 4 == 0) { // every 4th user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db4'); 
    } 

    else if ($userID % 3 == 0) { // every 3th user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db3'); 
    } 

    else if ($userID % 2 == 0) { // every 2nd user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db2'); 
    } 

    else // every other user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db1'); 
    } 

    $db->query('SELECT * FROM ...;'); 

?>