2015年11月18日水曜日

s3fsでローカルキャッシュを使う | ライタス株式会社


ヘルプや記事を読めばわかるのですが、意外とはまってしまったので、記事にします。

s3fsでは、読み書きの遅いS3ストレージを使いやすくするために、
ローカルディスクを一次キャッシュとして使うことができます。

コマンドは以下の感じでお使いください。

s3fs [バケット名] [マウント先] -o url=[S3公開URL] -o allow_other -o use_cahce=[キャッシュ先]


S3公開URLは、アマゾンの場合は、必要ありませんので、念のため。

ポイントは、use_cacheオプションです。 マウント先を指定するところがミソです。


一旦キャッシュに入ったファイルは、頃合いを見て減っていくはず・・・
と思ったら減りませんでした。

手動で削除すればいいのでしょうか・・・?

キャッシュについては、オフィシャルwikiに記載があったので、転記します。
If enabled via "use_cache" option, s3fs automatically maintains a local cache of files in the folder specified by use_cache. Whenever s3fs needs to read or write a file on s3 it first downloads the entire file locally to the folder specified by use_cache and operates on it. When fuse release() is called, s3fs will re-upload the file to s3 if it has been changed. s3fs uses md5 checksums to minimize downloads from s3. Note: this is different from the stat cache (see below).
Local file caching works by calculating and comparing md5 checksums (ETag HTTP header).
The folder specified by use_cache is just a local cache. It can be deleted at any time. s3fs re-builds it on demand. Note: this directory grows unbounded and can fill up a file system dependent upon the bucket and reads to that bucket. Take precaution by using a quota system or routinely clearing the cache (or some other method).

英語が苦手ですが、何とか読んでみると

use_cacheを有効にした場合、s3fsは指定したフォルダにファイルを自動配置します。s3fsgがファイルを読み書きするとき、use_cacheで指定されたローカルキャッシュにS3からダウンロードします。fuseファイルシステムがrelease()を呼んだら、s3fsは、変更されたファイルを、s3にアップロードします。 ※これは、stat cacheと異なっているファイルを指します。 キャッシュされたローカルファイルは、MD5チェックサム(HTTPヘッダーのETagを使用)と比較され、同期されます。use_cacheで指定されたフォルダは、ローカルキャッシュとして動作します。ローカルキャッシュのファイルは、いつでも削除が可能です。s3fsはオンデマンドでリビルドします。 ※キャッシュで指定したディレクトリは、際限なくいっぱいになります。いっぱいになると、バケットからデータを直接を参照するようになります。こうならないように、ときどきキャッシュをクリアするように心がけて下さい。

訳は、ところどころ間違っていると思うので、指摘が欲しいところです。

キャッシュクリアは手動ですか・・・cronで削除するような仕掛けが必要ですね。 たぶん。

使ってみたところ、確かにリードは早くなった気がします。が、ライトはそんなに変わりませんでした。(当たり前?)
どう振る舞うのかわかりにくいので、使うかどうかは、ローカルリソースとの相談になるかと思います。


本記事は、弊社代表のブログ記事なんでもIT屋の宿命からの転載です。

0 件のコメント:

コメントを投稿