2011-11-14 12 views
3

1人のアイテムにどれくらいのオーバーヘッドが必要か分かっていますか? 1バイトのキーを挿入すると、 'stats'コマンドはアイテムごとに65バイトが消費されることを示します。Memcached item overhead

これは予期され、修正されていますか?

おかげで、 ピョートル

答えて

8

はい、Memcache自身のデータ構造は、1項目あたり50バイト以上を食べます。それはあなたのデータとキーに少し依存するので、64ビットマシンでは60バイト以上と仮定します。 memcacheののコードを見たときに一つは、それを見ることができます

https://github.com/memcached/memcached/blob/master/memcached.h

はここでアイテムを構成するものです:

/** 
* 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; 

64ビットマシン上で* 8 3までの合計3つのポインタがありますが、 = 24バイト。そこには2つのタイムスタンプがあり、32ビットでなければならないので、合計で8バイトになります。次のintは8バイト、shortは2、u_int8は1バイトでなければなりません。

合計46バイトになります。

CASが有効である場合は8つのバイトを加算する64ビットCAS値は、存在する総

54バイトは今では厄介取得以下は、データのフラグおよび長さを小数として印刷された文字データであります(コードはhttps://github.com/memcached/memcached/blob/master/items.cの80行目にあります)。フラグが "0" は、キーは1つの文字であり、データが空であることを考えると、これは作る:

  • 1バイトキー+ 1つのバイト0
  • 1バイトの "スペース"、1バイトフラグ "0"、 1バイトの "スペース"、1バイトの "0"
  • 2バイトの "\ R \ n"(改行)の合計を作り、別の10バイトのターミネータデータの
  • 2バイト

可能な限り小さなmemcacheアイテムサイズ(64ビットの場合、CASオプションを有効にするには、-Cオプションを使用して無効にすることができます)。

65バイトを取得した場合、クライアントが「10」などのフラグを設定している可能性があります。

0

それは項目クラスによって異なり、もっと自分の用途に合わせて設定することができます。あなたのベスト・ベットは、多くのものを保管し、キャッシュ・レートをモニターすることです。アプリケーションのパフォーマンスが低下している場合は、調整できます。