Memcached Item Overhead
memcached
kaynak koduna göre bir item için minimum 64 byte
overhead var. Yani memcached
her bir key-value çifti için ekstradan 64 byte
daha harcıyor.
Kodda ki _stritem
yapısına bakınca; herbiri 8 byte
olan 3 adet pointer
gözüküyor,
struct _stritem *next;
struct _stritem *prev;
struct _stritem *h_next; /* hash chain next */
3 * 8 byte = 24 byte
Bitiş zamanı ve son erişim zamanını tutan iki adet timestamp var,
rel_time_t time; /* least recent access */
rel_time_t exptime;
2 * 4 byte = 8 byte
Data'nın size bilgisi,
int nbytes; /* size of data */
1 * 8 byte = 8 byte
Ne kadar erişim olduğunu tutan short
,
unsigned short refcount;
1 * 2 byte = 2 byte
Sonraki flagler, bunların uzunlukları, slab class id, key uzunluğu gibi ekstra bilgiler,
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 */
4 * 1 byte = 4 byte
-C
seçeneği ile başlatmadıysanız CAS
yani Compare-and-Swap seçeneği açık olacaktır.
CAS
değeri için,
union {
uint64_t cas;
char end;
} data[];
1 * 8 byte = 8 byte
Sonrası da (https://github.com/memcached/memcached/blob/master/items.c) burada ki koda göre,
/**
* Generates the variable-sized part of the header for an object.
*
* key - The key
* nkey - The length of the key
* flags - key flags
* nbytes - Number of bytes to hold value and addition CRLF terminator
* suffix - Buffer for the "VALUE" line suffix (flags, size).
* nsuffix - The length of the suffix is stored here.
*
* Returns the total size of the header.
*/
static size_t item_make_header(const uint8_t nkey, const int flags, const int nbytes,
char *suffix, uint8_t *nsuffix) {
/* suffix is defined at 40 chars elsewhere.. */
*nsuffix = (uint8_t) snprintf(suffix, 40, " %d %d\r\n", flags, nbytes - 2);
return sizeof(item) + nkey + *nsuffix + nbytes;
}
" %d %d\r\n" = 6 byte
+ key (2 byte
) ve termination datası (2 byte
) ile birlikte toplamda 10 byte
daha ekleniyor.
Sonuç olarak CAS enabled sistemde toplam 64 byte
herbir key için overhead var. Yani minimum bir key-value çiftinin size olarak değeri 65 byte
oluyor.