2011-11-14 2 views
3

단일 항목 당 얼마나 많은 오버 헤드가 필요한지 아는 사람 있습니까? 1 바이트 키를 삽입하면 'stats'명령은 항목 당 65 바이트가 소비되는 것을 보여줍니다.Memcached item overhead

예상 되 고 수정 되었습니까?

감사합니다, 표트르

답변

8

예, Memcache의 자체 데이터 구조는 항목 당 50 바이트 이상을 차지합니다. 그것은 당신의 데이터와 키에 조금 의존하기 때문에, 64 비트 머신에서 60 바이트 이상을 가정하십시오. https://github.com/memcached/memcached/blob/master/memcached.h

다음 항목을 구성하는 작업은 다음과 같습니다 : memcache에의 코드에서 볼 때

하나는 볼 수

/** 
* Structure for storing items within memcached. 
*/ 
typedef struct _stritem { 
    struct _stritem *next; 
    struct _stritem *prev; 
    struct _stritem *h_next; /* hash chain next */ 
    rel_time_t  time;  /* least recent access */ 
    rel_time_t  exptime; /* expire time */ 
    int    nbytes;  /* size of data */ 
    unsigned short refcount; 
    uint8_t   nsuffix; /* length of flags-and-length string */ 
    uint8_t   it_flags; /* ITEM_* above */ 
    uint8_t   slabs_clsid;/* which slab class we're in */ 
    uint8_t   nkey;  /* key length, w/terminating null and padding */ 
    /* this odd type prevents type-punning issues when we do 
    * the little shuffle to save space when not using CAS. */ 
    union { 
     uint64_t cas; 
     char end; 
    } data[]; 
    /* if it_flags & ITEM_CAS we have 8 bytes CAS */ 
    /* then null-terminated key */ 
    /* then " flags length\r\n" (no terminating null) */ 
    /* then data with terminating \r\n (no terminating null; it's binary!) */ 
} item; 

3 포인터가 있습니다을하는 64 비트 컴퓨터의 합에 최대 3 * 8 = 24 바이트. 그곳에는 32 비트가되어야하는 두 개의 시간 스탬프가 있으므로 총 8 바이트를 만듭니다. 다음 int는 8 바이트 여야하고 short는 2이어야하며 u_int8은 단일 바이트 여야하므로 14까지 합계가됩니다.

이렇게하면 총 46 바이트가됩니다.

CAS 8 바이트까지 추가 64 비트 CAS 값가 활성화 인 경우 총

54 바이트 이제 지저분 : 이하의 플래그, 데이터의 길이를 소수로 인쇄 된 문자 데이터이며 (코드는 https://github.com/memcached/memcached/blob/master/items.c, 줄 80에서 찾을 수 있습니다). 플래그가 "0"키는 하나 개의 문자입니다, 데이터가 비어 있음을 감안할 때,이 있습니다 :

  • 1 바이트 키 + 1 바이트 0
  • 1 바이트 "공간", 1 바이트 플래그 "0", 1 바이트 "공간", 1 바이트 '0'
  • 2 바이트 "\ R \ n"(라인 피드) 종단 데이터
  • 2 바이트
  • 총을 다른 10 바이트이다

가능한 가장 작은 memcache 항목 크기 (64 비트)에서 64 바이트를 사용합니다 (CAS를 활성화 한 경우 -C 옵션을 사용하여 비활성화 할 수 있습니다).

65 바이트를 얻으면 클라이언트가 "10"또는 그와 같은 플래그를 설정했을 수 있습니다.

0

그것은 항목 클래스에 따라 다르며, 더 나은에 맞게 응용 프로그램을 구성 할 수 있습니다. 가장 좋은 방법은 많은 것을 저장하고 캐시 속도를 모니터링하는 것입니다. 응용 프로그램 성능이 저하되면 조정할 수 있습니다.