14.18.2 InnoDB 및 memcached의 통합 아키텍처
이 섹션에서는 memcached 데몬이 MySQL Server에 어떻게 통합되는지에 대해 설명합니다. 이것은이 방법과 NoSQL 구성 요소 또는 인터페이스를 MySQL 백엔드에 결합하는 다른 기법을 비교하여 그 우열을 이해하는 데 도움이됩니다.
memcached는 MySQL Server와 통합하면 MySQL 플러그인 데몬으로 구현되어 InnoDB
스토리지 엔진에 직접 액세스하여 SQL 레이어를 무시합니다.
현재 릴리스에서 제공되는 기능 :
mysqld 데몬 플러그인으로 memcached : mysqld와 memcached는 모두 동일한 프로세스 공간에서 실행하여 매우 짧은 대기 시간으로 데이터에 액세스합니다.
SQL 파서 최적화 더욱 핸들러 API 레이어도 무시하고
InnoDB
테이블에 직접 액세스합니다.텍스트 기반 프로토콜과 바이너리 프로토콜 모두로 구성된 표준 memcached 프로토콜.
InnoDB
+ memcached의 조합은 memcapable 명령의 55 개 모든 호환성 테스트를 통과하고 있습니다.다중 컬럼 지원 : 여러 컬럼을 키 / 값 저장소 "값"부분에 매핑 할 컬럼 값은 사용자가 지정한 구분자로 구분됩니다.
기본적으로 memcached 프로토콜을 사용하여
InnoDB
에서 데이터를 직접 읽고 쓸하고 MySQL에서InnoDB
버퍼 풀 을 통해 인 메모리 캐시를 관리합니다. 기본 설정은 데이터베이스 응용 프로그램에 대한 예기치 않은 동작을 최소한으로 억제 한 안정적인 결합되어 있습니다. 예를 들어 기본적으로 데이터베이스 측에서 데이터가 커밋되지 않거나, memcachedget
요청에 오래된 데이터를 반환 할 수 없도록되어 있습니다.고급 사용자는 기존의 memcached 서버로 시스템을 구성하는 모든 데이터를 memcached 기본 엔진 (메모리)에만 캐시하거나 "memcached 기본 엔진"(메모리 캐시)와
InnoDB
memcached 엔진 (백엔드 영구 저장소로의InnoDB
)의 조합을 사용할 수 있습니다.
innodb_api_bk_commit_interval
,daemon_memcached_r_batch_size
및daemon_memcached_w_batch_size
구성 옵션을 사용하여InnoDB
및 memcached 작업간에 데이터가 전송되는 빈도를 제어 할 수 있습니다. 최고의 신뢰성을 얻으려면 두 일괄 처리 크기 옵션의 기본 값을 1로합니다.MySQL 구성 변수
daemon_memcached_option
에서 memcached 구성 옵션을 지정할 수 있습니다. 예를 들어, memcached가 대기하는 포트를 변경하거나 최대 동시 연결 수를 줄이거 나, 키와 값의 페어의 최대 메모리 크기를 변경하거나 오류 로그에 대한 메시지 디버깅을 활성화 할 수 있습니다.구성 옵션
innodb_api_trx_level
를 사용하면 사용자는 memcached 인터페이스에 의해 처리되는 쿼리 트랜잭션 격리 수준 을 제어 할 수 있습니다. memcached는 트랜잭션 의 개념이 아니지만,이 프로퍼티를 사용하면 memcached가 인터페이스 테이블과 같은 테이블에 DML 문을 실행하면 SQL 문에 의해 발생한 변경이 memcached에 표시 될 때까지의 속도를 제어 할 수 있습니다. 기본적으로 이것은READ UNCOMMITTED
로 설정되어 있습니다.다른 구성 옵션은
innodb_api_enable_mdl
입니다. "MDL"는 "메타 데이터 잠금"을 나타냅니다. 이것은 기본적으로 MySQL 레벨에서 테이블을 잠그기 위해 매핑 된 테이블을 SQL 인터페이스를 통해 DDL 에서 삭제하거나 변경할 수 없습니다. 잠금이 없으면 테이블을 MySQL 레이어에서 놓을 수 있지만, memcached 또는 다른 사용자가 테이블의 사용을 중지 할 때까지 InnoDB 스토리지에 보관됩니다.
memcached의 독립형 사용 및 InnoDB와 병용의 차이
섹션 16.6 "MySQL과 memcached의 병용" 에 기재되어있는 바와 같이, MySQL 사용자는 memcached를 MySQL과 함께 사용하는 것을 이미 잘 알고있는 경우가 있습니다. 이 섹션에서는 섹션 내의 정보의 유사점 및 차이점과 MySQL에 내장 된 memcached의 InnoDB
통합 기능을 사용하는 경우에 대해 설명합니다. 각 항목의 첫 번째 링크에서 기존의 memcached 서버에 대한 관련 정보에 액세스 할 수 있습니다.
설치 : memcached 라이브러리는 MySQL Server에 포함되어 있기 때문에 설치 및 설정은 간단 명료합니다. 사용하는 memcached 용 테이블을 설치하기위한 SQL 스크립트를 실행하여 일회성
install plugin
문을 발행하여 memcached를 사용 가능하게하고, MySQL 구성 파일이나 부팅 옵션에 다른 포트를 사용하는 등의 필요한 memcached 옵션을 추가합니다. 일반 memcached 배포를 설치하여 memcp, memcat, memcapable 등의 추가 유틸리티를 얻을 수 있습니다.배포 : 일반적으로 능력이 낮은 다수의 memcached 서버를 실행합니다.
InnoDB
+ memcached의 조합은 데이터베이스 및 memcached 서버의 비율이 1 : 1이되기 때문에 보통의 배포는 MySQL을 이미 실행중인 또는 중간 정도 높은 능력을 가진 소수의 서버 머신이 포함됩니다. 이 서버 구성의 장점은 다수의 서버에 걸쳐 미사용 메모리를 활용하거나 검색을 분산 시키거나하는 것보다 개별 데이터베이스 서버 각각의 효율을 높이는 것이 더 낫습니다. 기본 구성에서는 memcached는 메모리가 거의 사용되지 않고, 인 메모리 검색은InnoDB
버퍼 풀 에서 제공되며이 버퍼 풀은 최근 사용 된 데이터와 자주 사용되는 데이터를 자동으로 캐시합니다. 기존의 MySQL Server 인스턴스와 마찬가지로innodb_buffer_pool_size
구성 옵션의 값을 (OS 수준에서의 페이징을 발생시키지 않는) 실용 가능한 높은 값을 유지하고이를 통해 많은 워크로드가 메모리에서 실행되는 있도록합니다.만료 : 기본적으로 (캐시 정책
innodb_only
을 사용),InnoDB
테이블에서 최신 데이터가 항상 반환하므로 만료 옵션은 사실상 영향이 없습니다. 캐시 정책을caching
또는cache-only
로 변경 한 경우 만기 옵션은 정상적으로 작동하지만, 요청 된 데이터가 메모리 캐시에서 만료되기 전에 기초 테이블에서 업데이트 된 경우 데이터가 오래 되어있을 수 있습니다.네임 스페이스 : memcached는 하나의 거대한 디렉토리와 유사하며, 여기에서는 파일이 서로 일치하지 않게, 프리픽스와 접미사를 사용하여 복잡한 이름을 지정할 수 있습니다.
InnoDB
및 memcached에 의한 통합 서버에서는 키에 같은 명명 규칙을 사용할 수 있지만 추가 규칙이 하나 있습니다.@@
.table_id
.key
table_id
형식의 키 이름은innodb_memcache.containers
테이블에서 매핑 데이터를 사용하여 특정 테이블을 참조하도록 디코딩됩니다.key
는 지정된 테이블에서 참조되거나이 테이블에 기록됩니다.@@
표기는get
,add
및set
함수에 대한 개별 호출에만 작동하고incr
나delete
등의 다른 기능은 작동하지 않습니다. 세션의 후속 memcached 작업에 대한 기본 테이블을 지정하려면@@
표기와 테이블 ID를 사용하여 키 부분은 지정하지 않고get
요청을 실행합니다. 예 :get @@ table_x
후속
get
,set
,incr
,delete
및 기타 작업은innodb_memcache.containers.name
컬럼에서table_x
의해 지정된 테이블을 사용합니다.해시 및 배포 : 캐시 정책
innodb_only
를 사용하여 기본 구성은 리플리케이션 슬레이브 서버 세트 등 서버에서 모든 데이터를 사용할 수 종래의 배치 구성에 적합합니다.데이터를 샤드 구성처럼 물리적으로 분할하는 경우,
InnoDB
및 memcached 결합 된 서버를 실행하는 여러 대의 컴퓨터에서 데이터를 분할 할 수 종래의 memcached 해시 메커니즘을 사용하면 요청을 특정 컴퓨터로 보낼 수 합니다. MySQL에서 일반적으로 memcached에add
요청에 의해 모든 데이터를 삽입하기위한 적절한 서버의 데이터베이스에 적절한 값이 저장됩니다.이러한 유형의 배포 모범 사례가 계속 체계화되어 있습니다.
메모리 사용 : 기본적으로 (캐시 정책
innodb_only
을 사용), memcached 프로토콜은InnoDB
테이블간에 정보를 교환하고 memcached의 메모리 사용량을 증가 및 감소시키는 것이 아니라 고정 된 크기의InnoDB
버퍼 풀에서 인 메모리 검색 를 처리합니다. 상대적으로는 memcached 측에서 메모리를 거의 사용하지 않습니다.캐시 정책을
caching
또는cache-only
로 전환하면 memcached 메모리 사용량의 일반 규칙이 적용됩니다. memcached 데이터 값의 메모리는 "슬래브"을 이용하여 할당됩니다. memcached에서 사용되는 슬래브 크기 및 최대 메모리를 제어 할 수 있습니다.두 경우 모두, 예를 들어 telnet 세션을 통해 표준 프로토콜을 통해 액세스되는 익숙한 통계 시스템을 사용하여 통합 된 memcached 데몬을 모니터 및 문제점 해결 할 수 있습니다. 통합 데몬과 함께 추가의 유틸리티가 포함되어있는 것은 아니기 때문에
memcached-tool
스크립트 를 사용하려면 전체 memcached 배포를 설치합니다.스레드의 사용 : MySQL 스레드 및 memcached 스레드는 동일한 서버에 공존해야하므로 운영 체제 스레드에 부과되는 모든 제한이 총 수치에 적용됩니다.
로그의 사용 : memcached 데몬은 MySQL Server와 함께 실행하고
stderr
에 기록하므로 기록을위한-v
,-vv
및-vvv
옵션은이 출력이 MySQL 오류 로그 에 기록됩니다.memcached 작업 :
get
,set
,add
,delete
등의 자주 사용되는 작업을 사용할 수 있습니다. 직렬화 (복잡한 데이터 구조를 나타내는 정확한 문자열 서식)는 언어 인터페이스에 따라 다릅니다.MySQL 프론트 엔드로 memcached 사용 :
InnoDB
를 memcached와 통합 시킨다는 것은 바로이 것입니다. 이러한 구성 요소를 함께 배치함으로써 응용 프로그램의 성능이 향상됩니다.InnoDB
에 의해 메모리와 디스크 간의 데이터 전송을 처리되기 때문에 응용 프로그램의 로직이 단순화됩니다.유틸리티 : MySQL Server는
libmemcached
라이브러리를 포함하고 있습니다 만, 추가 명령 행 유틸리티를 포함하지 않습니다. memcp, memcat, memcapable 같은 명령을 취득하려면 완전한 memcached 배포를 설치합니다. memrm 및 memflush가 캐시에서 항목을 삭제하면 항목은 기반이되는InnoDB
테이블에서 삭제됩니다.프로그래밍 인터페이스 : 항상 사용하는 언어와 동일한 언어로, C 및 C ++ , Java , Perl , Python , PHP 및 Ruby 를 사용하여
InnoDB
및 memcached의 조합에서 MySQL Server에 액세스 할 수 있습니다. 다른 memcached 서버와 같은 서버 호스트 이름과 포트를 지정합니다. 기본적으로 통합 된 memcached 서버는 일반적으로 동일한 포트 인11211
을 수신합니다. 텍스트 프로토콜과 바이너리 프로토콜 을 모두 사용할 수 있습니다. memcached 함수의 동작 을 수행 할 때 사용자 정의 할 수 있습니다. 직렬화 (복잡한 데이터 구조를 나타내는 정확한 문자열 서식)는 언어 인터페이스에 따라 다릅니다.자주 묻는 질문 : MySQL은 여러 릴리스에서 광범위한 memcached FAQ가 준비되어 있습니다. MySQL 5.6 답변은 대체로 변함이 없지만,
InnoDB
테이블을 memcached 데이터 저장 매체로 사용하는 것으로,이 조합을 읽기 전용 캐시가 아니라 쓰기 작업이 많은 애플리케이션에 사용할 수 있도록되어 있습니다.
이 기능의 작동 방식에 대한 자세한 내용은 섹션 14.18.7 "InnoDB memcached 플러그인의 내부 구조" 를 참조하십시오.