GitHubは各自がリポジトリを持つ分散型ソースコード管理システムになっています。そして各自が差分を受け取ることでコラボレーションを実現しています。 同じような仕組みをデータについても行おうとしているのがDatです。まだはじまったばかりのプロジェクトではありますが非常に興味深いソフトウェアになります。 インストールはnpmを使って行いますので簡単に完了します。

$ npm install dat -g

インストールが完了したら、最も基本的な使い方を試してみます。

$ mkdir foo
$ cd foo
$ dat init

これで初期化が終わります。Gitに似ていますね。次にデータを追加します。

# 一例
$ echo '{"hello": "world"}' | dat --json

# CSVからも可能
$ cat some_csv.csv | dat --csv

データの読み込みはcrudというコマンドを使います。しかし筆者環境ではcrudがエラーになってしまいました。

$ dat crud get foo
# 全データの場合はcatを使います。
$ dat cat

その他、以下のようなコマンドがサポートされています。

# 実データの出力
dat dump

# メタデータなしのデータ出力
dat compact

# サーバの開始
dat serve

# データの削除
rm -rf .dat

メインのデータが出来上がったら、次は別なコンピュータがデータを取り込みます。initする際にリモートサーバを指定します。この際、メイン側ではサーバを立ち上げておく必要があります。

サーバを立ち上げたところ。

$ dat init --remote http://localhost:6461/_archive

これでデータがコピーされる仕組みです。後はデータが更新されたら

$ dat pull

データを同期します。データはバージョン管理して保存されるので、pullは差分だけを取り込むので早く同期ができるようになっています。

データをダンプしたところ。

Datではデータの配信、同期システムだけでなくCSVからJSON、MS AccessのmdbからPostgreSQLなどデータの変換モジュールや位置情報や文字の大文字小文字変換、解析処理を行うこともできます。 Gitに似ているのですが、仕組みとしてGitを使っていません。その理由としてはコミットが多くなると(数百万レベルで)statusチェックにかかる時間が膨大になってしまうこと、GitHub.comでは巨大なファイルが取り扱えないと言った問題があります。 GitHubがコードに適しているのは確かで、データを分散化してホストし、リアルタイムに同期していく仕組みを考えるならば確かに専用の仕組みがあった方が良いでしょう。ビッグデータの市場はさらに盛り上がっており、そのための仕組みがクラウドベースでしか提供されないのも残念なことです。Datがうまくいけば中央集権的な現状のデータ管理から脱した面白い仕組みが生まれてくるかもしれません。 Datはnode/JavaScript製、BSD Licenseのオープンソース・ソフトウェアです。 Dat maxogden/dat