2009-03-26

http://anond.hatelabo.jp/20090326124554

連番ってどういうこと?

順方向に探査すれば?ってこと?

何に使いたいか具体的に書くと、とある処理でwebページを取得するのだけど、その時、urlをキーにmemcachedキャッシュしようとしている。

しかし、urlが長大で250バイトを越えるとmemcachedが受け付けないので、適当な長さの文字列に変換したい。

250バイト未満のキーなら受け付けるmemcachedを使ってキャッシュすることが確定事項。

今は250バイト以上ならmd5値の16進表記を使うようにしている。

しかし、こんなところでmd5ってのも重いだけだなと。

crc32も使えるので、urlを4分割して16バイト長にするのはどうか。

実際どのくらい差があるのか。

と、思ったところでsquidとかその他実用しているキャッシュだったりハッシュテーブルだったりはどんな関数アルゴリズム使ってるのかなと思ったわけ。

今後のためにも調べておきたいと思った。

記事への反応 -
  • http://anond.hatelabo.jp/20090326142330 の続き pythonでベンチとった。試した方法は以下 md5hex: md5を使う crc32x4: 4分割してそれぞれcrc32にかけてつなぐ headtail: 初めの16文字と終りの16文字をつなぐ ...

    • セキュリティ目的ではない。ハッシュテーブルで使うような奴でキャッシュで使いたい。 手軽なほうが良い。軽いほうが良い。推測可能でよい。数十バイトくらいの文字列にしたい。 md5...

      • ただの連番でよくね?

        • 連番ってどういうこと? 順方向に探査すれば?ってこと? 何に使いたいか具体的に書くと、とある処理でwebページを取得するのだけど、その時、urlをキーにmemcachedでキャッシュしよう...

          • URLの最初の100文字程度と、最後の100文字程度をくっつけたとしたら、実際に使われているURLでは殆ど衝突しないのではないだろうか?

            • 頭100バイトと尻100バイトで思いついたけど、網目キャッシュなんてどう? あらかじめ250バイトって制約があるなら、 ・250バイトまでの文字列はそのまま ・250バイトを超えたら...

            • 確かにそんな気はする。つか、前はほぼ固定なので、後250を取れば問題ない気がする。 ただ、今後の事も考えて、ベターな方法を知っておこうかなと。

      • 適当にググる。がいくつかあったので羅列 某所のハッシュテーブル実装のおまけ的ハッシュ値計算法 str.charCodeAt(0) + str.charCodeAt(str.length-1)(str.charCodeAt(0) + str.charCodeAt(str.length-1)) * str.length...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん