• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 1. InnoDB 소개
    2. InnoDB의 개념과 아키텍처
    3. InnoDB 구성
    4. InnoDB 관리
    5. InnoDB 테이블 스페이스 관리
    6. InnoDB 테이블 관리
    7. InnoDB 압축 테이블
    8. InnoDB 파일 형식 관리
    9. InnoDB Row Storage and Row Formats
    10. InnoDB 디스크 I/O 및 파일 영역 관리
    11. InnoDB와 온라인 DDL
    12. InnoDB 부팅 옵션 및 시스템 변수
    13. InnoDB의 성능
    14. InnoDB INFORMATION_SCHEMA 테이블
    15. InnoDB 모니터
    16. InnoDB 백업 및 복구
    17. InnoDB와 MySQL 복제
    18. InnoDB 및 memcached의 통합
    1. InnoDB 및 memcached 조합의 장점
    2. InnoDB 및 memcached의 통합 아키텍처
    3. InnoDB Memcached 플러그인의 개요
    4. InnoDB memcached 플러그인의 보안 고려 사항
    5. InnoDB memcached 인터페이스용 응용 프로그램 만들기
    6. 복제에서 InnoDB memcached 플러그인 사용
    7. InnoDB memcached 플러그인 내부 구조
    8. InnoDB memcached 플러그인 문제 해결
    19. InnoDB 문제 해결
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

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 테이블을 통해 지원됩니다.
  • separator : 여러 value_columns 가 정의되어있는 경우 하나의 긴 문자열 값을 다른 값으로 분리하는 데 사용합니다. 기본적으로 separator 는 | 문자입니다. 예를 들어, 값 열로 col1, col2 를 정의하고 구분 기호로 | 정의하면 memcached에서 다음 명령을 실행하면 값을 col1 과 col2 에 각각 삽입 할 수 있습니다.

      set keyx 10 0 19
     valuecolx | valuecoly 

    valuecol1x 는 col1 에 저장되어 valuecoly 는 col2 에 저장됩니다.

  • table_map_delimiter : 특정 테이블의 키에 액세스하기 위해 키 이름에 @@ 표기를 사용할 때의 스키마와 테이블 이름을 구분하는 문자. 예를 들어, @@t1.some_key 와 @@t2.some_key 같은 키 값을 가지고 있지만, 다른 테이블에 저장됩니다.

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 값을 가진 행이 사용됩니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved