优势
1 数据迁移方便,所有数据基于mongodb-grids存储,分布式配置,数据迁移等操作非常方便
2 mongodb 稳定性 可靠性 要比其他分布式文件存储性能更好
3 基于varnishd做缓存,有效解决了 从gridfs读取数据需要查询2次的问题,提高了性能
4 使用方便,代码行数寥寥无几,轻松搞定,各项配置也很简单
5 nginx-gridfs 插件可以基于nginx直接使用,无需再用php从mongodb中读取数据生成图片
=============================================
1编译安装php的mongodb扩展
https://github.com/mongodb/mongo-php-driver/downloads
下载最新版
$ cd mongo-php-driver
$ phpize
$ ./configure --with-php-config=/path/to/php-config
$ make
$ make install
2编译安装nginx &nginx-gridfs
https://github.com/mdirolf/nginx-gridfs
下载最新版
$ ./configure --add-module=/path/to/nginx-gridfs/source/
$ make
$ make install
3 安装varnishd
PHP测试gridfs写入
PHP:
$conn = new Mongo();
$db = $conn->photo;
$grid = $db->getGridFS();
$data = file_get_contents("http://xxx.com/20120303/6f73/6a69/6d64597a/1330782227306.1400.467.467.jpg");
$id = $grid->storeBytes($data);
var_dump($id);
nginx 的配置文件
server
{
listen 8080;
server_name photo.com;
index index.html index.php index.htm;
location /photo/
{
gridfs photo field=_id type=objectid;
default_type image/jpeg;
mongo 127.0.0.1:27017;
}
}
varnishd 部分配置
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (req.http.host ~ "photo.com")
{
unset req.http.cookie;
return (lookup);
}
}
sub vcl_deliver
{
set resp.http.Expires = "Sun, 17 Feb 2013 05:00:00 GMT";
unset resp.http.X-Varnish;
unset resp.http.Age;
unset resp.http.Via;
unset resp.http.Connection;
set resp.http.Cache-Control = "max-age=2592000";
set resp.http.Last-Modified = "Sat, 24 Dec 2011 01:24:34 GMT";
if (obj.hits > 0)
{
set resp.status=304;
}
}
启动varnishd
/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1G -a 127.0.0.1:80
本文仅仅是提供了一个示例,全部代码要自己根据情况修改哈~ 首次发文,请大牛拍砖
原文来自我的blog http://lnmp.in
我的微博 http://weibo.com/pojaaer 求粉~~~