GW (ゴールデンウィーク) が暇だったので、まとめていた文章を記事にしてみます.
はじめに
TechRacho を眺めてるような人は,様々なデバイスを利用して,日々データを生成していることと思われます.プログラムを書いたり,メールを書いたり,写真をとったり.オフィス製品や TeX などで何か資料を作成しているかもしれないです.
また,最近はデバイスの種類が増えてきているので,データが様々なマシンに分散して困っている方もいらっしゃるのではないでしょうか?会社の PC,自分のラップトップ,自宅の PC,どっかに借りたサーバマシン.
分散されたデータを管理する有名なサービスとして,DropBox やGoogleDrive があげられると思います.確かに,無料で使えるしソフトウェアはまーまー良くできているし便利です.
だがしかし.僕は,誰かがやってるサービスってのを利用するのが嫌いです.どうせデータの中身は覗き見られているのだろうし,ちょっと業績が悪くなれば(=時代の流れによっては)サービスは停止してしまうだろうし,そもそも容量だったりの制限がついているのが気に食わないです.
と言うことで,今回は分散データを管理するためのソフトウェアをいくつか挙げつつ,僕が利用している構成を紹介したいと思います.
私のデータ管理方法
分散するデータを管理する際,大きく分けて二つのやりかたがあると思うのです.一つは,下図のように,それぞれのデバイスやサービスに全部分散させておく方法ですね.例えば,写真は picasa で,ppt とかは DropBox で,メールは Gmail で,な感じですね.前述の通り僕が,外部サービスが嫌いというのももちろんありますが,その他にも,データが分散し過ぎちゃってどこに何があるのか分からなくなりやすい,という問題も発生しそうです.
基本的に,僕の管理方法は下図のように,中央集権型です.こうしておけば,全てのデータが中央のデバイスに集中するわけです.更に頑張ると,全データ横断した検索だったりも可能になるわけです.Google はもともと,このモデルをサービスとして提供した上で,データ閲覧時に広告を折り混ぜる,というのが基本方針なわけです.
次に,中央集権型でデータを管理する際,身近なデバイスにどのようにデータを保持させるかが問題になってきます.大きく分けると以下の 2 つになるはずです.
- データは必ず中央のデバイスに置いておいて,編集した後の保存は即座に中央デバイスに反映する.
- コピーをデバイスに持ってきて,適宜同期させる.
どちらを選択するべきかは,各人のライフパターンによって決めるべきです.
- の特徴は,デバイスが増えてもデータの不整合は起きにくいが,中央デバイスと末端デバイスの間の通信速度がかなり早くないと現実的に利用しにくいです.具体的には例えば,Windows ファイル共有(samba)でファイルをファイルサーバに置く,というのは,ローカルエリアネットワークがかなり高速であるからできるわけです.もしここのネットワークが遅いと,編集したファイルを保存するのに時間がかかったりします.ただし,末端デバイスに大容量のストレージは必要ありません.
-
の特徴は,最悪,中央デバイスとネットワークで接続できなくても,ファイルの編集ができることです.また,末端デバイスに内蔵されているストレージに対するアクセスだけなので,編集なども高速です.あまりネットワークの速度に依存しない管理方法,というわけです.ただし,末端デバイスの数が増加すると,どのデバイスのもっとも最新のファイルを持っているかを管理しなければなりません.
僕は,昔,学校の中にほぼ住み込みのような形で,日々の時間を過ごしていました.学校の中は,無線 LAN (Wifi) がほぼ完備されていましたし,そのネットワークは大変高速でした.なので,1. の管理方法でほぼ問題ありませんでした.
しかし,仕事を始めてみると,電車で都内を移動したり,家から作業をしたくなったり,ちょっとお金に余裕が出てくるので喫茶店で作業をしてみようと思ったりと,ネットワークの速度がバラバラになり,2. を選ばざるを得ません.と言うことで,仕事を始めてからは,分散ファイル管理のソフトウェアをいくつか試してみました.
分散ファイル管理ソフトウェア
今まで試したことがあるのは,以下のソフトウェアたちです.
- Subversion
- git
- ownCloud
- rsync
- unison
TechRacho は開発ブログなので,1 と 2 のプログラムのソースコード管理システムは馴染みのある方が多いのではないでしょうか.本来これらは,複数人で一つのソフトウェアを開発するためのものですが,僕は自分のファイル管理に使おうと思いました.
Subversion は,僕の利用用途にはよくマッチしました.僕の中央デバイスは,FreeBSD なホストなので,自分のホームディレクトリを全て Subversion のレポジトリ管理化に置き,必要なディレクトリのみ check out して利用できました.ただし,多少 checkout するのに時間がかかるのと,.svn というリビジョン管理のためのディレクトリが,全てのサブディレクトリにすべからく作成され,容量が 2 倍近くにふくれ上がります.また,中央デバイスにはSubversion のサーバを建ててレポジトリ管理をしなければならないので,そこでも容量を食います.とは言え,この方法で 1 年くらいは過ごしていました.
ただし,最近,レポジトリ管理で Subversion を使っていると,どうも社内でdis られます.「今どき git じゃね?」.古いソフトウェアを意地でも使い続けるのは,emacs と Wnn くらいで十分なので,git も試してみました.
git は Subversion と比べると,中央デバイスからファイルを転送するのが早いです.が,使用される容量を見ると,Subversion から比べれば多少減りましたが,やっぱり食ってしまいますし,何といってもサブディレクトリだけを持ってくることができません.これでは意味がない!
と言うことで,git はあきらめました.この時点で既に Subversion に戻るのも嫌だったので,もうちょっと「分散ファイル管理」に特化したものはないかと探してみた所,Dropbox clone という ownCloud というものがありました.ownCloud は,Dropbox clone に特化したソフトウェアというよりも,統合情報管理ツールみたいな感じで,ウェブ上で写真のサムネイルが見れたりとか,余計な web システムも沢山ついています.
ownCloud で目を引くのは,Dropbox のように,ファイルを同期するためのWindows,Mac の専用アプリがついているところです.キター!と飛びついてみました.だがしかし.ownCloud は同期部分を csync というコマンドが担っていて,サーバ側とのファイルの変更差分を確認するのですが,毎回同期する度に全ファイルをリニアに stat していることが分かりました.2014/05 現在で,同期しているファイルは 16GB あります.数分に 1 度同期するようなプログラムが,16GB 分のそこそこ細かいファイル群を stat されまくったら,ラップトップのバッテリーがすぐになくなってしまいます.ということで,こいつも却下.
ということで,ろくなツールが無いので,初心に戻って rsync でも使うかな,と思っていたところ,unison というツールが目に止まりました.rsync もunison もほぼ同じようなツールで,2 サーバ間のファイルの同期をとってくれるソフトウェアです.
海外のサイトでは,unison クソ,っていう意見が多いのですが,僕の体感では,unison の方が rsync よりも高速に転送すべきファイルを見つけ出してくれているような気がします.初回設定時には,対象ファイルの index を作成しているようで,結構な時間がかかるのですが,今は 16GB の中の転送すべきファイル発見まで,数秒のようです.ファイル転送自体は多少アルゴリズムがどうのこうのと騒いでも対して変わらないので僕は無視しています.
最終的には、rsync とか unison とかの話になってしまったのですが、考える順番を気に掛けると git / subversion だって他のツールだって入ってくる、ということで、多少冗長ですが紹介してみました。
これからもデジタル環境は刻々と変化すると思いますが、どのような点を気にすべきの一助になれば幸いです。
追記
ちなみに、スマートフォンから生成されるデータに関しては、まだそれほど考えていません.写真程度なので手動で整理しているのが現状です.