2012-02-22 20 views
3

私は数週間、Basho Riakを使用しています。私は文字列データを格納するだけでした。PHPクライアントを使用してRiakで画像を保存する

しかし、私は画像を保存するためにそれを使用していると私はPHPクライアントでこれを行うことができますいくつかのアイデアをしたいと思います。以下は

は、データを格納するための基本的なコードです:

require_once('riak-php-client/riak.php'); 

# Connect to Riak 
$client = new RiakClient('127.0.0.1', 8098); 

# Choose a bucket name 
$bucket = $client->bucket('test'); 

# Supply a key under which to store your data 
$person = $bucket->newObject('string_key', 'string_data'); 

# Save the object to Riak 
$person->store(); 

は、私はちょうど画像をBASE64_ENCODE次いで得られた文字列を格納でください!または、より良い方法がありますか?

ありがとうございます。

答えて

5

エンコードされていないバイナリデータをPHPクライアントでRiakに保存する場合は、RiakBucket::newBinary()RiakBucket::getBinary()を使用します。

$image = file_get_contents("images/TagLabs-Logo-White-240x60.png"); 
$md5 = md5($image); 

$riak->bucket("test") 
    ->newObject("image_base64", base64_encode($image)) 
    ->store(); 

$riak->bucket("test") 
    ->newBinary("image_raw", $image, 'image/png') 
    ->store(); 

$b64Read = $riak->bucket("test")->get("image_base64"); 
echo "B64 md5 comparison: original=$md5, b64=".md5(base64_decode($b64Read->getData()))."\n"; 
$rawRead = $riak->bucket("test")->getBinary("image_raw"); 
echo "Raw md5 comparison: original=$md5, raw=".md5($rawRead->getData())."\n"; 

が出力生成されます私のパフォーマンステストでは

B64 md5 comparison: original=6749cfaf1516b01db9792e119d53177a, b64=6749cfaf1516b01db9792e119d53177a 
Raw md5 comparison: original=6749cfaf1516b01db9792e119d53177a, raw=6749cfaf1516b01db9792e119d53177a 

を、両方のアプローチは、基本的にはRiakにの視点から同じオーバーヘッドを持っています。ベース64のエンコーディング/デコード(そして、フードの下では、base64データはjsonエンコード/デコードされます)の消費サイクルは、バイナリアプローチを全体的に先取りします。

編集:Erlangバックエンドの制限により、Riakバイナリオブジェクト(this postを参照)に格納されるデータの上限が50mbあることにも注意してください。現実には、どこにいても、それらのイメージをどのように格納しているのか考え直すことができます。そのようなイメージに頻繁にアクセスすると、パイプ上に送信するデータがたくさんあります。おそらく良い考えです。

+0

ありがとうございました。私はbase64_encodeに傾いていた。自分のやり方があれば、私はRiakに生の画像データを保存しません。それらがオンラインでアクセスされる画像であれば、それらをRackspace Cloud Filesに入れ、Riakにその場所の記録を入れます。もしそれらがプライベートなファイルだったら、おそらくfusion-ioカード付きの専用サーバをいくつか取得し、そこに画像を保存して同じリンクをすることを考えていたでしょう。しかし、今のところ、私は[私たちの]オプションで行くつもりです。乾杯。 –

+0

1MBは、Riakバイナリオブジェクトに格納されているデータの推奨限度です。それ以上のものはRiak CSを考慮する必要があります。 –

関連する問題