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を開発した方と同じそうな。凄いです。