2008-08-07 12 views
4

memcachedにハードコードされたチャンク制限(圧縮後0.5メガ)があるのはなぜですか?誰かがそれを再構築したのですか?私はそれのような大きなチャンクを送るべきではないことを知っているが、これらの余分な重いチャンクは私のために時々起こり、大混乱を招く。Memcachedチャンク制限

答えて

4

引用するofficial FAQ

What are some limits in memcached I might hit? (Wayback Machine)

にあったこの質問:あなたはおそらくmemcacheのに表示されます

シンプルな限界がキーと アイテムのサイズ制限があります。キーは250文字に制限されています。 。それが最大の典型的な スラブサイズであるため、格納されたデータは 」、

FAQは今改訂されましたが、サイズが1メガバイトを超えることはできませんし、これをカバーする二つの別々の質問今があります。

What is the maxiumum key length? (250 bytes)

は、

鍵の最大サイズは250文字です。 の接頭辞がoriの前面に貼られているため、クライアントの「接頭辞」などの機能を使用している場合は、この値は になりませんginal key。短いキーは です。メモリを節約し、帯域幅を節約するためです。

Why are items limited to 1 megabyte in size?

ああ、これは人気の質問です!

短い答え:メモリアロケータのアルゴリズムの仕組みのためです。

Memcachedのメモリストレージエンジン(今後はプラグイン可能/調整済み... )は、メモリへのスラブアプローチを使用しています 管理。メモリは、さまざまなサイズのスラブチャンクに分割され、 は最小数から始まり、階乗で最大で まで可能です。

が最小値は400バイトであると言う、最大値が1 メガバイトであり、階乗は1.20である。

スラブ1から400バイトのスラブ2から480バイトスラブ3から576バイト...等

スラブが大きいほど、それ以前のスラブとの間にはより大きな隙間があります。したがって、最大値が大きいほど、メモリの記憶容量は小さくなります( )。 Memcachedは、存在するすべてのスラブに のメモリを事前に割り当てる必要があります。したがって、より大きい の大きな階乗を設定すると、さらに大きなオーバーヘッドが必要になります。

あなたがそれをしたくない理由があります... ウェブページについて話していて、値を保存/ロードしようとしている場合は、 そのサイズは大きいでしょう何か問題でも。そのサイズでは、 は、データ構造 を読み込んでメモリに展開するのにかなりの時間がかかり、サイトがうまく動作しない可能性があります。

あなたが本当に1メガバイトを超えるアイテムを保存したいならば、あなたは 編集しslabs.c:POWER_BLOCK値でmemcachedを再コンパイル、または に非効率的なのmalloc /無料のバックエンドを使用することができます。その他の提案には、 データベース、MogileFSなどがあります。