我一直使用 MogileFS 存视频这样的大文件来做源站.也用来存海量的小文件. MogileFS 本身对大文件支持也是相当不错的,另外要知道大文件它查询数据库的次数就更加少.
在这需要提醒一下大家.需要注意在大文件上传的时候(平时我多大的都有大点的 4G 以上), 需要 MogileFS::Client 加上特别的参数,来分片上传,这样存放速度在 MogileFS 中就会快多了.
我们在使用 new_file 的方法来上传的时候,只需要加入可选参数中的 largefile => 1 .这个时候内部的 MogileFS::Client 中就会使用另一个上传的模块,不在使用默认的 MogileFS::NewHTTPFile.但功能基本一样,只是支持 chunked 和 partial (Content-Range) HTTP/1.1 PUT .
另外,在读文件的时候,另在 8k 读一次,建议一次的块为 1M -2M 这样也会快多了.如果使用 store_file 的方法来指定文件上传时,除了默认的 largefile => 1 外,还需要加一个 chunk_size => 1024 * 1024.这样才能更加快的上传.
如下:
|
1
2
3
4
5
6
7
8
9 |
$mogc->store_file( 'testfile', '', 'testfile.flv, { largefile =>1, chunk_size => 1024*1024, } ); |
使用这个功能,也需要 mogstored 支持.我测试了默认的 mogstored 中使用的 Perlbal .但发现好象在 Centos5 上对 Content-Range 上传时会出错,提示大小不对,但不知道为什么在我的 Centos6 上测试就正常.
当然,要是你使用的不正常,就使用 cmogstored 好了.这个一定都正常.