mogilefsのperl APIを使ってみる

まずはclientホストにAPIをインストールします。MogileFS-ClientとMogileFS-Client-FilePathsの二つがあるみたいです。

インストール

CPANモジュールがいくつか必要なのでインストールします。

cpan> install IO::WrapTie

cpan> install LWP::Simple
以下もあわせてインストール
    Compress::Zlib
    HTML::Tagset
    HTML::Parser
    Compress::Raw::Bzip2
    Compress::Raw::Zlib

APIをインストールします。

$ cd trunk/api/perl/MogileFS-Client
$ perl Makefile.PL
$ make
$ su
# make install
$ cd trunk/api/perl/MogileFS-Client-FilePaths
$ perl Makefile.PL
$ make
$ su
# make install

テストスクリプト

テスト用のコードを書いてみました。実際に前回作った「test2」ファイルが保存されているパスの出力と、ファイルの中身を出力しています。こちらのエントリを参考にさせていただきました。

http://d.hatena.ne.jp/ZIGOROu/20061016/1161034490

実際の処理はtrackersとHTTPでやりとりしてるっぽいので他の言語でもAPIは作りやすそうですね。

ソースコード

#!/usr/bin/perl

use warnings;
use strict;

use MogileFS::Client;
use Readonly;

Readonly my $DOMAIN => 'mydomain';
Readonly my $CLASS => 'class';
Readonly my $TRACKERS => '192.168.0.191:7001';

my ($client, $key, $content, @paths);

#ファイルのキー
$key = 'test2';

$client = MogileFS::Client->new(domain => $DOMAIN, hosts => [$TRACKERS]);
@paths = $client->get_paths($key);

#パスの表示
print "File Paths: \n";
foreach my $path (@paths) {
  print "$path\n";
}
print "\n";

#ファイルの中身の表示
$content = $client->get_file_data($key);
print "data: \n";
print $$content;

実行結果

File Paths: 
http://192.168.0.192:7500/dev1/0/000/000/0000000001.fid
http://192.168.0.193:7500/dev2/0/000/000/0000000001.fid

data: 
test2

get_file_dataメソッドは複数あるmogstoredからランダムにデータを拾ってくるんですかねー?とすればこれだけでもバランシングになりそうですね。trackersも複数指定できるみたいだし、かなりよさげな感じがしてきました。ちなみにmogilefsを開発した方はmemcachedを開発した方と同じそうな。凄いです。