database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 27859 게시물 읽기
No. 27859
다시 글을 올리네요..
작성자
이성식(jamesdean017)
작성일
2008-11-07 11:41
조회수
4,418

요즘 리플리케이션 때문에 정신이 없네요..


두대의 서버로 구성된 서버에 php 상의 mysql 커넥션에 관한 질문을 하겠습니다.


쿼리의 select 를 제외한 updaet , insert , delete , create 등 데이터에 변화가 생기는 쿼리는


마스터 서버로 커넥션이 이루어져야 하지 않습니까?


저 같은 경우는 데이터베이스 클래스를 사용중인데 , 클래스로 들어오는 쿼리가 select 로 시작하냐


안하냐만 판단을 해서 마스터 , 슬레이브를 판단하였습니다.


몇번의 테스트를 해보니 우선 속도가 많이 느리구요.. ㅡㅡ'' 이게 결정적이지만..


select last_insert_id 가 문제가 발생하더군요..


여튼.. 일단은 클래스를 마스터용 , 슬레이브용으로 만들어서 지금 일일이 노가다 중입니다..


뭐 좋으신 방법이 있으신분은 알려주세요..

이 글에 대한 댓글이 총 5건 있습니다.

ㅎㅎ 늦었네요 이전에 질문에 답변 드렸는데요 ..^^;

확인 해보세요 ^^

박성원(darkancia)님이 2008-11-09 17:06에 작성한 댓글입니다.

아.. 답변 감사드립니다..

제가 말씀 드리는건 mysql 커넥션을 종류별로 분류를 한다고 해도 우선 쿼리에 있어서

마스터 , 슬레이브가 결정이 된다는 이야긴데요..

즉 커넥션별 설정파일이 여러개가 있어도 쿼리에 선택권이 있다는 겁니다.

a , b , c , d 서버에 대한 설정파일이 여러개가 있어도 쿼리가 update , delete , insert 이면 무조건 마스

터 서버로 커넥션이 이루어져야 하고 기타 나머지 쿼리라면 랜덤으로 슬레이브 어떤 서버로의 커넥션이

되어도 상관이 없구요..

이성식(jamesdean017)님이 2008-11-10 09:16에 작성한 댓글입니다.

ㅎㅎ 

말씀하신 부분은 대략 알고리즘을 구현하는거에 가깝게 느껴지네요  ^^;


문자열 함수를 써서 앞부분 select를 확인해서 랜덤으로 보내는 부분을 구현해야할듯한데요 ^^;


저희 팀 같은경우에는 코딩하면서 실행위치를 지정해주기때문에 이러한 알고리즘을 만들 필요가 없어서요 이부분에 대해서는 저희도 구현한적이 없어서.. 도움이 못되드리네요.


건승하시고 나중에 후기 부탁드립니다 ^^;


박성원(darkancia)님이 2008-11-10 10:51에 작성한 댓글입니다.

로드벨런싱에 관한 부분은 미들웨어를 통해서 적절히 분기해주어야 겟죠...


모든 쿼리는 미들웨어로 접속하고 미들웨어에서 설정한것대로 이쪽서버로 갈지 저쪽서버로 갈지 정해주는...뭐 방법론적으론 그렇습니다만...


뭐 간단하게...업데이트 쿼리들은 마스터로...그외 Select 는 그때상황에 맞께 아무데나...이렇게 한다고 하면 좀 쉬울텐데요..^^ (Select 쿼리들을 그때 그때 서버상황에 맞추어 분기한다는것 까지 정하면 할일이 많겟죠..각 서버단별로 커넥션도 관리해야 할것이고...쿼리가 몇개나 걸려있는지...기타등등...)


일단 select last_insert_id() ; 와 같은 업데이트쿼리에 영향을 주는것들도 마스터로 분기가 되어야 하는것은 정책을 정해주면 되는것이고...어떠한 쿼리들이 쓰이는지 이것이 업데이트쿼리에 영향을 주는것인지를 먼저 파악을 해야겟죠..뭐 쿼리파싱문제는 그다지 어려운건 아니니깐...


그리고 슬레이브 서버로 분기된 쿼리들이 수행시간이 늦는것은...설정상의 문제인듯 보입니다. (마스터랑 하드웨어적으로나 소프트웨어적으로 같은 상태라면...늦을 이유가 없겟죠?) 


여튼 건승을...

team b(teamb)님이 2008-11-10 18:30에 작성한 댓글입니다.

아..모두들 답변 감사드립니다..

일단 지금 현재 해결한 점은

데이터베이스의 클래스를 두개를 만들어 각각 쿼리를 찾아 다니면 select 는 슬레이브 클래스를

나머지 쿼리들은 마스터 클래스를 사용하게 해놨습니다.

일일이 노가다 하느라 오래걸렸지만 서도.. 일단 구동을 시켜보니 예전에 비해 눈에 띄게 속도가 빨라

졌습니다.

한가지 문제점은 mysql_connect 란 함수를 사용시 처음 커넥션이 연결이 되면 mysql_close 를 하기 

전까지는 커넥션이 유지가 된다는 겁니다.

이것때문에 많이 헤맸는데요.. ㅎㅎ 저희 경우는 셀렉트를 하면서 중간중간 업데이트가 날라가는 부분

이 있어 이부분의 경우는 그냥 전부 마스터에서 처리를 하도록 했구요..

뭐 기타 별다른 특이 사항은 없었네요..

하지만 이제 부터의 과제는 매번 슬레이브 서버가 추가 될때마다 이럴순 없잖아요..

뭔가의 대책을 세워야 할거 같은데.. 좋은 방법을 찾고는 있습니다.

박성원님의 방법이 저희랑 비슷한 방식인거 같긴한데요.. 대량의 슬레이브 서버일때는 생각을좀 하셔야

할듯한데요.. teamb 님의 방식은 좀 연구를 해봐야 할거 같습니다.

아무쪼록 바쁜시간 내주셔서 답변해주신점 감사드리구요.. 다들 즐프 하세요..

이성식(jamesdean017)님이 2008-11-13 15:53에 작성한 댓글입니다.
이 댓글은 2008-11-13 15:56에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
27862MySQL에서 사용가능한 최대메모리는 어떻게 되는지요? [1]
주정도
2008-11-10
4336
27861나이별 구분처리... [1]
도와주세요
2008-11-10
4302
27860MySQL에서 Oracle 접속
최승권
2008-11-07
5036
27859다시 글을 올리네요.. [5]
이성식
2008-11-07
4418
27858[급]데이베이스를 열수가 없습니다. [1]
이성산
2008-11-07
3757
27857mySQL password() 4.x 5.x [2]
이수민
2008-11-07
4220
27856my sql 공부하는 학생인데요...
안성현
2008-11-06
3778
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다