推荐AWS S3下载的块/部件大小?

时间:2013-12-27 16:36:19

标签: http amazon-web-services amazon-s3 http-headers range

我们网站的一部分允许用户安全下载文件。我们使用HTTP Ranges让拥有优秀浏览器的用户恢复下载,因为它们可以变得非常大。我们目前正在迁移到S3并希望保留下载恢复。

我实际上已经使用HTTP_RANGE和这段代码完成了所有工作:

// Calculate the end range
$rangestart = $this->iSeekStart;
$chunksize = 1024 * 1024 * 8;

// Start buffered download from S3
do
{
    // reset time limit for big files
    set_time_limit(0);

    $rangeend = $rangestart + $chunksize;

    $aData = $S3->getObject(array(
        'Bucket' => $bucket,
        'Key'    => $key,
        'Range'  => 'bytes='.$rangestart.'-'.$rangeend
    ));

    print $aData['Body'];
    flush();
    ob_flush();

    $rangestart = $rangeend + 1;
}
while ($rangestart < $this->sFileSize);

我唯一的问题是,$chunksize的大小是多少?太小,下载速度很慢,但我也不想通过一次从AWS获取太多数据来减慢速度。

我在S3文档中找不到很多信息,因为它的大小适合。这里有一个很好的“最佳实践”吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,我认为关于最佳块大小的文档很少的原因是没有一个。下载速度根据许多因素而变化很大,因为尺寸也会有所不同。

我会简单地使用最低带宽选项进行一些试错测试(如果适用,就像移动设备一样),看看“二分搜索”方法会发生什么。真的很大(但不荒谬);然后,如果失败,用一半测试。等等。

如果您想要更严格的内容,请在可行的情况下调查或确定客户的下载速度。然后做一些数学计算来优化普通客户的块大小。