キャッシュファイルのディレクトリ分割
スポンサーリンク
スピードや相手の負荷軽減などのために、
web apiの結果をローカルのディスクにキャッシュしている。
1つのディレクトリにどんどん入れていくと、lsすると超遅かったり、
そもそも1つのディレクトリに作れるファイル数に達したらどうするのよ
とか、問題がある。
また1つのディレクトリにファイルが増えるとルックアップが遅くなる。
というわけで、ディレクトリをわけようということになる。
前提として、キャッシュファイルのファイル名は、md5である。
256 + 256 * 256 + 256 * 256 * 256 = 16,843,008 のディレクトリを作成する。
ディレクトリは、00からffまで。
ディレクトリを作成する dir.php
パスとファイル名の決定
ハッシュ値から2文字ずつ取り出して、ディレクトリを決定する。
追記
上記のコードだとディレクトリができすぎて、inodeがいっぱいになって
ファイルが作れなくなってしまうので、レベル2までにした。
ディレクトリを作成する dir2.php
パスとファイル名の決定
ハッシュ値から2文字ずつ取り出して、ディレクトリを決定する。
web apiの結果をローカルのディスクにキャッシュしている。
1つのディレクトリにどんどん入れていくと、lsすると超遅かったり、
そもそも1つのディレクトリに作れるファイル数に達したらどうするのよ
とか、問題がある。
また1つのディレクトリにファイルが増えるとルックアップが遅くなる。
というわけで、ディレクトリをわけようということになる。
前提として、キャッシュファイルのファイル名は、md5である。
256 + 256 * 256 + 256 * 256 * 256 = 16,843,008 のディレクトリを作成する。
ディレクトリは、00からffまで。
ディレクトリを作成する dir.php
<?php
function make_directory_256_level3 ($basedir) {
for ($i = 0; $i < 256; $i++) {
$x = sprintf ("%02x", $i);
for ($j = 0; $j < 256; $j++) {
$y = sprintf ("%02x", $j);
for ($k = 0; $k < 256; $k++) {
$z = sprintf ("%02x", $k);
$d = "$x/$y/$z";
$mode = 0777;
$recursive = true;
mkdir ($basedir .'/'.$d,
$mode, $recursive);
}
}
}
}
make_directory_256_level3 ('.');
?>
パスとファイル名の決定
ハッシュ値から2文字ずつ取り出して、ディレクトリを決定する。
<?php
$hash = md5 ($url);
$hash_dir = '';
if (preg_match ('/^(..)(..)(..)/', $hash, $match) ) {
$hash_dir = $match[1] . '/' . $match[2] . '/' . $match[3] . '/';
$filepath = $api_cache_dir . '/' . $hash_dir . $hash;
}
?>
追記
上記のコードだとディレクトリができすぎて、inodeがいっぱいになって
ファイルが作れなくなってしまうので、レベル2までにした。
ディレクトリを作成する dir2.php
<?php
function make_directory_256_level2 ($basedir) {
for ($i = 0; $i < 256; $i++) {
$x = sprintf ("%02x", $i);
for ($j = 0; $j < 256; $j++) {
$y = sprintf ("%02x", $j);
$d = "$x/$y";
$mode = 0777;
$recursive = true;
mkdir ($basedir .'/'.$d, $mode, $recursive);
}
}
}
}
make_directory_256_level2 ('.');
?>
パスとファイル名の決定
ハッシュ値から2文字ずつ取り出して、ディレクトリを決定する。
<?php
$hash = md5 ($url);
$hash_dir = '';
if (preg_match ('/^(..)(..)/', $hash, $match) ) {
$hash_dir = $match[1] . '/' . $match[2] . '/';
$filepath = $api_cache_dir . '/' . $hash_dir . $hash;
}
?>
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12