프로토콜에는 시작 및 정상 작동을위한 별도의 단계가 있습니다. 시작 단계에서 프론트 엔드는 서버에 대한 연결을 엽니 다. (여기에는 사용중인 인증 방법에 따라 단일 토토 또는 여러 토토가 포함될 수 있습니다.) 모든 것이 제대로 진행되면 서버는 상태 정보를 프론트 엔드로 보냅니다. 초기 시작 요청 토토를 제외 하고이 프로토콜 의이 부분은 서버에 의해 구동됩니다.
정상 작업 중에 프론트 엔드는 쿼리 및 기타 명령을 백엔드로 보냅니다. 백엔드는 쿼리 결과 및 기타 응답을 다시 보냅니다. 몇 가지 사례가 있습니다 (예 :Notify
) 백엔드가 원치 않는 토토를 보내지 만, 대부분의 경우 세션 의이 부분은 프론트 엔드 요청에 의해 주도됩니다.
세션 종료는 일반적으로 프론트 엔드 선택에 의해 이루어 지지만 특정 경우 백엔드에 의해 강요 될 수 있습니다. 어쨌든 백엔드가 연결을 닫으면 종료하기 전에 열린 (불완전한) 트랜잭션을 롤백합니다..
정상 작동 내에서 SQL 명령은 두 개의 서브 프로토콜 중 하나를 통해 실행할 수 있습니다. 에서“간단한 쿼리”프로토콜, 프론트 엔드는 텍스트 쿼리 문자열을 보냅니다. 에서“확장 쿼리”프로토콜, 쿼리 처리는 여러 단계로 분리됩니다 : 구문 분석, 매개 변수 값의 바인딩 및 실행. 이것은 추가 복잡성 비용으로 유연성과 성능 이점을 제공합니다.
정상 작업에는와 같은 특수 작업에 대한 추가 서브 프로토콜이 있습니다.copy
.
모든 커뮤니케이션은 토토 스트림을 통해 이루어집니다. 토토의 첫 바이트는 토토 유형을 식별하고 다음 4 바이트는 나머지 토토의 길이를 지정합니다 (이 길이 수는 자체가 포함되지만 토토 유형 바이트는 아닙니다). 토토의 나머지 내용은 토토 유형에 따라 결정됩니다. 역사적 이유로 클라이언트가 보낸 첫 번째 토토 (시작 토토)에는 초기 토토 유형 바이트가 없습니다.
토토 스트림과 동기화를 잃지 않도록 서버와 클라이언트는 일반적으로 내용을 처리하기 전에 전체 토토를 버퍼 (바이트 카운트 사용)로 읽습니다. 이렇게하면 내용을 처리하는 동안 오류가 감지되면 쉽게 복구 할 수 있습니다. 극단적 인 상황 (예 : 토토를 버퍼링하기에 충분한 메모리가 없음)에서 수신기는 바이트 카운트를 사용하여 읽기 토토를 재개하기 전에 건너 뛰는 입력의 양을 결정할 수 있습니다..
반대로, 서버와 클라이언트는 불완전한 토토를 보내지 않도록주의해야합니다. 이것은 토토를 보내기 전에 버퍼에 전체 토토를 마샬링하여 일반적으로 수행됩니다. 통신 실패가 토토를 보내거나 수신함으로써 파트 웨이가 발생하는 경우, 유일한 현명한 응답은 토토 바운드 동기화를 복구 할 희망이 거의 없기 때문에 연결을 포기하는 것입니다..
확장 쿼리 프로토콜에서 SQL 명령의 실행은 여러 단계로 나뉩니다. 단계 사이에 보유 된 상태는 두 가지 유형의 객체로 표시됩니다.준비된 진술and포털. 준비된 진술은 텍스트 쿼리 문자열의 구문 분석 및 시맨틱 분석 결과를 나타냅니다. 준비된 진술은 그 자체로 실행할 준비가되어 있지 않습니다.에 대한 특정 값이 부족할 수 있기 때문입니다.매개 변수. 포털은 즉시 사전에 사전에 사상적으로 사전에 사로 잡힌 문을 나타내며, 누락 된 매개 변수 값이 채워져 있습니다.select
진술, 포털은 열린 커서와 동일하지만 커서가 비 처리하지 않기 때문에 다른 용어를 사용하도록 선택합니다select
진술.)
전체 실행주기는 A로 구성됩니다.Parse텍스트 쿼리 문자열에서 준비 된 문을 생성하는 단계; 에이bindStep. 필요한 매개 변수에 대한 준비된 명령문과 값이 주어진 포털을 만듭니다. 그리고 Aexecute포털 쿼리를 실행하는 단계. 행을 반환하는 쿼리의 경우 (select
, show
등), 실행 단계는 제한된 수의 행만 가져 오라고 말할 수 있으므로 작업을 완료하기 위해 여러 실행 단계가 필요할 수 있습니다..
백엔드는 여러 준비된 진술과 포털을 추적 할 수 있습니다 (그러나 세션 내에서만 존재하며 세션에서 공유되지 않습니다). 기존 준비된 진술과 포털은 만들어 졌을 때 지정된 이름으로 참조됩니다. 또한“이름이없는”준비된 진술과 포털이 존재합니다. 이들은 이름이 지정된 개체와 동일하게 행동하지만, 쿼리를 한 번만 실행 한 다음 버려지는 경우에 대한 작업은 최적화 된 반면, 명명 된 객체의 작업은 여러 용도에 대한 기대에 최적화됩니다..
특정 데이터 유형의 데이터가 여러 다른 중 하나에서 전송 될 수 있습니다형식. 기준토토7.4 유일한 지원 형식은입니다.“텍스트”and“BINAGE”, 그러나 프로토콜은 향후 확장을 제공합니다. 모든 값에 대한 원하는 형식은 a에 의해 지정됩니다.형식 코드. 클라이언트는 각 전송 된 매개 변수 값과 쿼리 결과의 각 열에 대해 형식 코드를 지정할 수 있습니다. 텍스트에는 형식 코드가 있고 바이너리에는 형식 코드 1이 있으며 다른 모든 형식 코드는 향후 정의를 위해 예약되어 있습니다.
값의 텍스트 표현은 특정 데이터 유형의 입력/출력 변환 기능에 의해 생성되고 수용되는 모든 문자열입니다. 전송 된 표현에는 후행 널 캐릭터가 없습니다. 프론트 엔드는 C 문자열로 처리하려면 수신 값에 하나를 추가해야합니다. (텍스트 형식은 내장 널을 허용하지 않습니다.)
정수에 대한 이진 표현은 네트워크 바이트 순서를 사용합니다 (가장 중요한 바이트). 다른 데이터 유형의 경우 문서 또는 소스 코드를 참조하여 이진 표현에 대해 알아보십시오. 복잡한 데이터 유형에 대한 이진 표현은 서버 버전에서 변경 될 수 있습니다. 텍스트 형식은 일반적으로 더 휴대용 선택입니다.
토토에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식토토 문제를보고하려면