php - 使用 PHP 客户端使用 Riak 存储图像

标签 php nosql riak riak-search

我已经使用 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 编码,然后存储结果字符串吗?!或者有更好的方法吗?!

提前致谢。

最佳答案

如果您想使用 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 的角度来看,这两种方法的开销基本相同。在 base64 编码/解码上花费周期(加上在幕后,base64 数据然后被 json 编码/解码)使二进制方法总体领先。

编辑:另请注意,由于 Erlang 后端的限制,存储在 Riak 二进制对象(参见 this post)中的数据上限为 ~50mb。实际上,如果您接近那个,您可能需要重新考虑如何存储这些图像,如果您经常访问这些图像,那么需要在管道上发送大量数据,例如 NFS 或其他本地文件系统缓存可能是个更好的主意。

关于php - 使用 PHP 客户端使用 Riak 存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394706/

相关文章:

php - 我如何使用 php 脚本动态编辑和更新我的 etc/hosts 文件

java - 尝试批量插入多个实体时出现 App Engine 错误,且每次插入实体时属性 "UserNo"都会增加 1

php - 从 Riak 读取多个文档的最快方法

erlang - 为什么大公司使用 Mnesia 而不是使用 Riak 或 CouchDB

database - Riak 后端选择 : bitcask vs leveldb

php - 如何查看浏览器发送的内容

php - 从 PHP 写入十六进制到串口

php - 添加简码时页面未更新,并且在 wordpress 插件开发期间也在 wordpress 仪表板中呈现简码内容

mysql - 如何在 Meteor 中处理关系数据?

mongodb - Mongodb复制