いしなお!
2006-07-07 [長年日記]
_ [URL] URLのパーツごとの統計
旧1470.netではURLをvarchar(255)で格納していたんだけど、新1470.netではprotocol、hostname、port、path、querystring、fragmentというパーツに分割し、URL自体はそれらへのIDへのリンクとして持つようにした。
URL情報をハンドリングするには、必ず6つのテーブルへの参照が必要と、処理的には冗長なんだけど、従来のやり方だと無限に増え続けるURL情報がDBサイズを圧迫するんで、とにかくDB上のURL関連データのサイズを圧縮する方が、スケールを考えたときには圧倒的に有利だったので。
で、しばらく走らせてみて、いろいろなURL関連の情報がたまってきたところで、URL数に対しての各パーツの数ってのは、結構面白い情報だなーと思ったので、現在の値を晒してみる。こういうのって研究している人いるのかなー。
| URL | 112,679 |
| プロトコル*1 | 2 |
| ホスト名*2 | 21,378 |
| パス | 78,979 |
| QUERY_STRING | 8,214 |
| フラグメント | 23,510 |
ちなみに、URL情報は形式的にvalidであれば、実体がなくても(404とか返ってきても)登録はされるようになっているんで、すべてが有効なURLであるとは限らない。
あと、うちのDBに登録されるURLってのは、基本的に
- 誰かが興味を持ったURL
- RSSなどで配信されているURL
なので、そういう偏りがあることにも注意が必要だろう。
_ [1470.net][障害報告][バグ] メモのパーマリンク情報の不整合を修正中です
メモのパーマリンク生成処理にバグがあったため、メモに関連するURIデータベースに重複(同じメモに関するURI表現が複数存在する)等が発生しています。現在修正スクリプトを走らせているので、しばらくしたら正しいパーマリンク表現一つに収束すると思います。
_ [1470.net][障害報告] 1台外れのサーバーがありました
1台deployに失敗してエラーを返すサーバーがあり、先ほどまで1/3の確率でエラーを返す状態になっていました。
ちなみに現在の構成では、フロントのpoundでバックエンドのWebサーバー×3に分散させていて、
Session
Type IP
TTL 300
End
といった感じでIPアドレスベースで接続サーバーを固定しているんで、IPアドレスが変わらない限りは、基本的に同じサーバーに接続するようになっています。
ので、外れのサーバーをひいた場合はずっとエラーが出っぱなし、あたりのサーバーをひいた場合は特に問題がない、みたいな感じの挙動になっていました。