14.18.7 InnoDB memcached 플러그인의 내부 구조
InnoDB memcached 플러그인의 InnoDB API
InnoDB
memcached 엔진은 InnoDB
API를 통해 InnoDB
에 액세스합니다. 대부분의 API는 내장 된 InnoDB
에서 직접 채용됩니다. InnoDB
API 함수는 "콜백 함수"로 InnoDB
memcached에 전달됩니다. InnoDB
API 함수는 InnoDB
테이블에 직접 방문하여 TRUNCATE TABLE
작업을 제외하고 대부분이 DML 작업입니다.
다음 나열된 모든 memcached 명령은 InnoDB
memcached API에 의해 구현됩니다. 다음 표는 각 memcached 명령이 DML 작업에 어떻게 매핑되는지의 개요를 보여줍니다.
표 14.10 memcached 명령과 연관된 DML 작업
memcached 명령 | DML 작업 |
---|---|
get | 읽기 / 반입 명령 |
set | 검색 후 삽입 또는 업데이트를 실행 (키가 존재하는지 여부에 따라) |
add | 검색 후 삽입 또는 업데이트를 실행 |
replace | 검색 후 업데이트를 실행 |
append | 검색 후 업데이트를 실행 (업데이트 전에 결과의 뒤에 데이터를 추가 할) |
prepend | 검색 후 업데이트를 실행 (업데이트 전에 결과 전에 데이터를 추가 할) |
incr | 검색 후 업데이트를 실행 |
decr | 검색 후 업데이트를 실행 |
delete | 검색 후 삭제를 실행 |
flush_all | 테이블을 삭제하려면 |
InnoDB memcached 플러그인에서 사용되는 기본 테이블
이 섹션에서는 InnoDB
memcached 플러그인에 의해 사용되는 기본 테이블에 대해 설명합니다.
innodb_memcached_config.sql
구성 스크립트는 InnoDB
memcached 플러그인이 필요한 3 개의 테이블을 설치합니다. 테이블은 전용 innodb_memcache
데이터베이스에 생성됩니다.
mysql> USE innodb_memcache; Database changed mysql> SHOW TABLES; +---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ 3 rows in set (0.01 sec)
containers 테이블
containers
테이블은 3 개의 테이블 중에서 가장 중요합니다. 이 테이블의 항목은 memcached 값을 저장하는 데 사용되는 InnoDB
테이블에 대한 "컨테이너"입니다. 컨테이너는 InnoDB
테이블의 컬럼을 아래 표에 표시된 값에 매핑합니다. 이 매핑은 memcached
가 InnoDB
테이블과 함께 작동하는 데 필요합니다.
containers
테이블에는 test.demo_test
테이블의 기본 항목이 있습니다. InnoDB
memcached 플러그인을 자체 InnoDB
테이블과 함께 사용하려면 사용하는 테이블의 항목을 containers
테이블에 추가해야합니다.
표 14.11 containers의 컬럼
컬럼 | 설명 |
---|---|
name | 컨테이너에 부여 된 이름입니다. |
db_schema | InnoDB 테이블이 존재하는 데이터베이스의 이름입니다. 이것은 필수 값입니다. |
db_table | memcached 값을 저장하는 InnoDB 테이블의 이름. 이것은 필수 값입니다. |
key_columns | memcached 작업에 대한 검색 키 값을 저장하는 InnoDB 테이블의 컬럼. 이것은 필수 값입니다. |
value_columns | memcached 데이터를 저장하는 InnoDB 테이블의 컬럼 (1 개). innodb_memcached.config_options 테이블에 지정된 구분 기호를 사용하여 여러 열을 지정할 수 있습니다. 기본적으로 구분 문자는 파이프 문자 ( "|")입니다. 여러 열을 지정하려면 정의 된 구분 문자로 열을 구분합니다. 예를 들어, col1|col2|col3 입니다. 이것은 필수 값입니다. |
flags | memcached 플래그 (기본 값과 함께 저장 및 검색하는 사용자 정의 숫자)로 사용되는 InnoDB 테이블의 컬럼을 지정합니다. memcached 값이 다중 컬럼에 매핑되는 경우 플래그 값은 일부 작업 ( incr 과 prepend 등)의 컬럼 지정자로 사용할 수 있으며, 그 결과 지정된 열에서 작업이 수행됩니다. 예를 들어, 3 개의 컬럼에 값을 매핑하고 이러한 열 중 하나 증가 작업을 수행하는 경우에 이러한 작업에 사용할 컬럼을 지정하려면 flags 를 사용할 수 있습니다. flags 컬럼을 사용하지 않으면 사용하지 않는 것을 나타 내기 위해 그 값을 0 으로 설정합니다. |
cas_column | 비교 및 스왑 (cas) 값을 저장하는 InnoDB 테이블의 컬럼. cas_column 값과 expire_time_column 값은 memcached가 다른 서버로 요청을 해시 데이터를 메모리에 캐시하는 방법에 관계합니다. InnoDB memcached 플러그인은 단일 memcached 데몬에 견고하게 통합되어 인 메모리 캐싱 메커니즘은 MySQL 및 버퍼 풀 에 의해 처리되기 때문에이 유형의 배포 이러한 열은 거의 필요하지 않습니다. 이 컬럼을 사용하지 않으면 값을 0 으로 설정하여 열을 사용하지 않는 것을 나타냅니다. |
expire_time_column | 만료 값을 저장하는 InnoDB 테이블의 컬럼. cas_column 값과 expire_time_column 값은 memcached가 다른 서버로 요청을 해시 데이터를 메모리에 캐시하는 방법에 관계합니다. InnoDB memcached 플러그인은 단일 memcached 데몬에 견고하게 통합되어 인 메모리 캐싱 메커니즘은 MySQL 및 버퍼 풀 에 의해 처리되기 때문에이 유형의 배포 이러한 열은 거의 필요하지 않습니다. 이 컬럼을 사용하지 않으면 값을 0 으로 설정하여 열을 사용하지 않는 것을 나타냅니다. |
unique_idx_name_on_key | 키 컬럼의 인덱스의 이름입니다. 이것은 고유 인덱스 여야합니다. 이것은 기본 키 또는 보조 인덱스 에 있습니다. 가능하면 키 컬럼을 InnoDB 테이블의 기본 키에하십시오. 이렇게하면이 컬럼에 보조 인덱스를 사용하는 검색 단계가 생략됩니다. memcached 참조 용 첨부 인덱스 를 만들 수 없습니다. 키 컬럼과 값 컬럼에 모두 복합 보조 인덱스를 정의하려고하면 InnoDB 는 오류를 반환합니다. |
containers 테이블 컬럼의 제약
db_schema
,db_name
,key_columns
,value_columns
및unique_idx_name_on_key
값을 지정해야합니다. 그렇지 않으면 설치가 실패합니다.flags
,cas_column
및expire_time_column
가 사용되지 않는 경우 이에0
을 지정합니다. 그렇지 않으면 설치가 실패 할 수 있습니다.key_columns
: memcached에서 강제되는 memcached 키의 최대 길이는 250 자입니다. 최대 길이를 초과 매핑 된 키가 사용 된 경우 작업이 실패합니다. 매핑 된 키는 Null이 아닌CHAR
또는VARCHAR
유형이어야합니다.value_columns
:CHAR
,VARCHAR
또는BLOB
컬럼에 매핑 될 필요가 있습니다. 길이에 제약이 아닌 값을 NULL로 지정할 수 있습니다.cas_column
:cas
값은 64 비트 정수입니다. 이것은 적어도 8 바이트의BIGINT
에 매핑 될 필요가 있습니다. 이 컬럼을 사용하지 않으면 사용하지 않는 것을 나타 내기 위해 그 값을0
으로 설정합니다.expiration_time_column
: 적어도 4 바이트의INTEGER
에 매핑 될 필요가 있습니다. 유효 기간은 Unix 시간의 32 비트 정수 (1970 년 1 월 1 일부터 초 단위의 32 비트 값)로서 또는 현재 시간에서 시작하는 초 수로 정의됩니다. 후자의 경우 초는 60 * 60 * 24 * 30 (30 일간 초)을 초과하지 않도록하십시오. 클라이언트가 전송 된 수치가 더 큰 경우 서버는 현재 시간에서의 오프셋이 아닌 실제 Unix 시간 값으로 간주합니다. 이 컬럼을 사용하지 않으면 사용하지 않는 것을 나타 내기 위해 그 값을0
으로 설정합니다.flags
: 적어도 32 비트INTEGER
에 매핑해야 NULL로 지정할 수 있습니다. 이 컬럼을 사용하지 않으면 사용하지 않는 것을 나타 내기 위해 그 값을0
으로 설정합니다.
컬럼 제약 조건을 적용하기 위해 플러그인을로드 할 때 사전 검사가 이루어집니다. 불일치가 발견되면 플러그인은로드되지 않습니다.
cache_policies 테이블
cache_policies
테이블은 InnoDB
memcached
설치에 대한 캐시 정책을 정의합니다. 단일 캐시 정책에서 get, set, delete 및 flush 조작에 대한 개별 정책을 지정할 수 있습니다. 모든 작업의 기본 설정은 innodb_only
입니다.
innodb_only
:InnoDB
를 memcached의 데이터 저장소로 사용합니다.cache-only
: 기존의 memcached 엔진을 데이터 저장소로 사용합니다.innodb_only
:InnoDB
와 기존의 memcached 엔진 모두를 데이터 저장소로 사용합니다. 이 상황에서 memcached가 메모리 내에서 키를 찾을 수없는 경우,InnoDB
테이블에서 값을 검색합니다.disable
: 캐시를 비활성화합니다.
표 14.12 cache_policies 컬럼
컬럼 | 설명 |
---|---|
policy_name | 캐시 정책의 이름. 기본 캐시 정책 이름은 cache_policy 입니다. |
get_policy | get 조작의 캐시 정책. 유효한 값은 innodb_only , cache-only , caching 또는 disabled 입니다. 기본 설정은 innodb_only 입니다. |
set_policy | set 조작의 캐시 정책. 유효한 값은 innodb_only , cache-only , caching 또는 disabled 입니다. 기본 설정은 innodb_only 입니다. |
delete_policy | delete 조작의 캐시 정책. 유효한 값은 innodb_only , cache-only , caching 또는 disabled 입니다. 기본 설정은 innodb_only 입니다. |
flush_policy | flush 조작의 캐시 정책. 유효한 값은 innodb_only , cache-only , caching 또는 disabled 입니다. 기본 설정은 innodb_only 입니다. |
config_options 테이블
config_options
테이블은 SQL을 사용하여 런타임에 변경할 수 memcached 관련 설정을 저장합니다. 현재 지원되는 구성 옵션은 separator
및 table_map_delimiter
입니다.
표 14.13 config_options 컬럼
컬럼 | 설명 |
---|---|
Name | memcached 관련 구성 옵션의 이름입니다. 현재 다음 구성 옵션이 config_options 테이블을 통해 지원됩니다.
|
Value | memcached 관련 구성 옵션에 할당 된 값입니다. |
여러 컬럼 매핑
플러그인 초기화 동안
InnoDB
memcached가containers
테이블에 정의되어있는 정보를 사용하여 구성 될 때,value_columns
에서 구문 분석되는 매핑 된 각 컬럼은 매핑 된 테이블에 비추어 검증됩니다. 여러 컬럼이 매핑되는 경우, 열이 각각 존재하고 올바른 타입인지 여부를 확인하기위한 검사가 있습니다.런타임에
memcached
삽입 작업에서 매핑 된 컬럼의 수보다 많은 구분자 값에 존재하는 경우, 매핑 된 값의 개수 만 검색됩니다. 예를 들어, 매핑 된 컬럼이 6 개로 구분 된 값이 7 개의 제공된 경우 처음 6 개의 구분 된 값 만 검색됩니다. 7 번째로 구분 된 값은 무시됩니다.매핑 된 컬럼보다 구분 된 값이 더 적은 경우, 입력 값이없는 컬럼은 NULL로 설정됩니다. 미기입 컬럼을 NULL로 지정할 수없는 경우, 삽입은 실패합니다.
매핑 된 값보다 많은 컬럼이 테이블에있는 경우 여분의 열은 출력 결과에 영향을 미치지 않습니다.
테이블의 예
innodb_memcached_config.sql
구성 스크립트는 예 test
데이터베이스에 테이블 demo_test
을 만듭니다. 또한 추가 테이블을 만들지 않고 InnoDB
memcached 플러그인을 즉시 작동시킬 수 있습니다.
container
테이블의 항목은 위의 목적으로 어느 컬럼이 사용되는지를 정의합니다.
mysql> select * from innodb_memcache.containers; +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ | name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key | +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ | aaa | test | demo_test | c1 | c2 | c3 | c4 | c5 | PRIMARY | +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ 1 row in set (0.00 sec) mysql> desc test.demo_test; +-------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+-------+ | c1 | varchar(32) | NO | PRI | | | | c2 | varchar(1024) | YES | | NULL | | | c3 | int(11) | YES | | NULL | | | c4 | bigint(20) unsigned | YES | | NULL | | | c5 | int(11) | YES | | NULL | | +-------+---------------------+------+-----+---------+-------+ 5 rows in set (0.01 sec)
테이블 ID가 키 이름 @@
표기 의해 요청되지 않는 경우는 다음과 같습니다.
행의
name
값이default
의 경우 해당 테이블이 memcached 플러그인에 의해 사용됩니다. 따라서innodb_memcache.containers
의 첫 번째 항목을demo_test
테이블보다 뒤로 이동시킨 경우name
값에default
를 사용합니다.default
의innodb_memcache.containers.name
값이 존재하지 않는 경우 알파벳순으로 첫 번째name
값을 가진 행이 사용됩니다.