1人のアイテムにどれくらいのオーバーヘッドが必要か分かっていますか? 1バイトのキーを挿入すると、 'stats'コマンドはアイテムごとに65バイトが消費されることを示します。Memcached item overhead
これは予期され、修正されていますか?
おかげで、 ピョートル
1人のアイテムにどれくらいのオーバーヘッドが必要か分かっていますか? 1バイトのキーを挿入すると、 'stats'コマンドはアイテムごとに65バイトが消費されることを示します。Memcached item overhead
これは予期され、修正されていますか?
おかげで、 ピョートル
はい、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つの文字であり、データが空であることを考えると、これは作る:
可能な限り小さなmemcacheアイテムサイズ(64ビットの場合、CASオプションを有効にするには、-Cオプションを使用して無効にすることができます)。
65バイトを取得した場合、クライアントが「10」などのフラグを設定している可能性があります。
それは項目クラスによって異なり、もっと自分の用途に合わせて設定することができます。あなたのベスト・ベットは、多くのものを保管し、キャッシュ・レートをモニターすることです。アプリケーションのパフォーマンスが低下している場合は、調整できます。