memcachedにハードコードされたチャンク制限(圧縮後0.5メガ)があるのはなぜですか?誰かがそれをアップするために彼らを再コンパイルしましたか?私はそのような大きなチャンクを送信するべきではないことを知っていますが、これらの余分な重いチャンクは時々私に起こり、大混乱を引き起こします。
1 に答える
この質問は、以前は公式の FAQにありました
ヒットする可能性のある memcached の制限は何ですか? (ウェイバックマシン)
引用するには:
おそらくmemcacheで見られる単純な制限は、キーとアイテムのサイズ制限です。キーは 250 文字に制限されています。格納されたデータのサイズは 1 メガバイトを超えることはできません。これは、典型的なスラブの最大サイズであるためです。」
FAQ が改訂され、これをカバーする 2 つの個別の質問が追加されました。
キーの最大サイズは 250 文字です。クライアントの「プレフィックス」または同様の機能を使用している場合、この値は小さくなることに注意してください。これは、プレフィックスが元のキーの先頭に追加されるためです。メモリを節約し、使用する帯域幅が少ないため、通常は短いキーの方が適しています。
アイテムのサイズが 1 メガバイトに制限されているのはなぜですか?
ああ、これはよくある質問です!
簡単な答え: メモリ アロケータのアルゴリズムの仕組みが原因です。
長い答え: Memcached のメモリ ストレージ エンジン (プラグイン可能/将来的に調整される予定です...) は、メモリ管理にスラブ アプローチを使用します。メモリは、さまざまなサイズのスラブ チャンクに分割されます。最小値から始まり、可能な最大値まで階乗で昇順になります。
最小値が 400 バイト、最大値が 1 メガバイト、階乗が 1.20 であるとします。
スラブ 1 - 400 バイト スラブ 2 - 480 バイト スラブ 3 - 576 バイト ... など
スラブが大きいほど、前のスラブとのギャップが大きくなります。したがって、最大値が大きいほど、メモリ ストレージの効率が低下します。Memcached は、存在するすべてのスラブに対してメモリを事前に割り当てる必要もあるため、最大値を大きくして小さい階乗を設定すると、さらに多くのオーバーヘッドが必要になります。
それをしたくない理由は他にもあります... Web ページについて話しているときに、それほど大きな値を保存/ロードしようとしている場合は、おそらく何か間違ったことをしている可能性があります。そのサイズでは、データ構造をメモリにロードおよびアンパックするのにかなりの時間がかかり、サイトのパフォーマンスが低下する可能性があります。
本当に 1MB を超えるアイテムを保存したい場合は、memcached を編集した
slabs.c:POWER_BLOCK
値で再コンパイルするか、非効率的な malloc/free バックエンドを使用できます。その他の提案には、データベース、MogileFS などがあります。