3

Basho 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して、結果の文字列を保存するだけですか?! それとももっと良い方法がありますか?!

前もって感謝します。

4

1 に答える 1

5

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

$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の観点からは基本的に同じオーバーヘッドを持っています。base64のエンコード/デコードにサイクルを費やすと(さらに、内部では、base64データがjsonでエンコード/デコードされます)、バイナリアプローチが全体的に先に進みます。

編集: Erlangバックエンドの制限により、Riakバイナリオブジェクト(この投稿を参照)に保存されるデータには最大50mbの上限があることにも注意してください。現実的には、その近くにいる場合は、それらの画像の保存方法を再考する必要があります。NFSや別のローカルファイルシステムキャッシュなど、頻繁にアクセスする場合は、パイプで送信する大量のデータです。おそらくより良いアイデアです。

于 2012-02-23T12:18:38.423 に答える