memcached の空間効率

memcached クライアントを実装してみて気づいたというか意識したこと。


オブジェクトのシリアライズはクライアントライブラリやユーザー任せなのだ。例えば Perl では Storable 。言うなれば汎用シリアライザ。
普段は全く意識せずに与えられた汎用シリアライザで扱えば良いと思う。


ただし格納するオブジェクトに特性があるときはカスタムシリアライザを作って空間効率を追求してみるのも面白いかも。
特性とは例えば格納するオブジェクトが

  • 特定の種類のみ
  • 特定の値域のみ

などの場合。


より具体的には

  • ascii 文字列だけ
  • 数値だけを格納してその範囲は 8, 16, 32, 64bit に収まる
  • 取り得る値が enum のように限られる

など。


うまくカスタムシリアライザを作れば格納時のオブジェクトサイズをぐっと小さくできる可能性がある。


この方法に対する考えられる反論は

  • メンテナンス性の問題
  • compress すれば不要では?

など。もっともな反論。


なので結論としては、「特殊な用途で使っている memcached サーバーが 100 台あるような場合にカスタムシリアライザで半分の 50 台に減らせるならうれしいよね」みたいなレベルの話かも。