使用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や別のローカルファイルシステムキャッシュなど、頻繁にアクセスする場合は、パイプで送信する大量のデータです。おそらくより良いアイデアです。