我需要生成并存储大量小型(1-10KB)PNG图像(>1000万)到数据库。
我唯一关心的是图像/秒吞吐量。目前我知道将gd图像对象存储到数据库的两种方法:
使用输出缓冲区:

ob_start();
imagepng($image);
$imageData = ob_get_contents();
ob_end_clean();

使用临时文件(tmpfs/ramfs):
$tmpFilePath = '/dev/shm/file_000.png';
imagepng($image, $tmpFilePath);
$imageData = file_get_contents($thumbnail);

更新。有第三种方法:使用php内存流:
// PHP streams are NOT supported
$tmpFilePath = 'php://memory';
imagepng($image, $tmpFilePath);
$imageData = file_get_contents($tmpFilePath);

我的问题是,有没有其他方法可以将图像写入数据库?每种方法的优缺点。
也许值得编写一个自定义流,它直接将数据写入数据库?
注意:将映像存储到文件系统不是一个选项。
基准结果:

最佳答案

您可以尝试让imagepng()写入memory stream而不是文件。

$tmpFilePath = 'php://memory/file_000.png';

imagepng($image, $tmpFilePath);
$imageData = file_get_contents($tmpFilePath);

虽然我不确定imagepng()函数是否可以处理I/O流,但如果可以,它可能是一个不错的选择。

09-25 10:07