将图像处理到数据库的最佳方法

Jon*_*rft 2 sql amazon-s3 amazon-web-services amazon-rds

这是我第一次设计一个必须考虑图像上传/下载流量以及使用亚马逊网络服务器的网络应用程序.我一直在读书,但我仍然很困惑如何最好地解决我的问题.

我正在构建一个Web应用程序,它将拥有大量的图像流量,我注意到它Amazon RDS比它更便宜Amazon S3.通常在我习惯构建的网站中,我不需要担心本地存储与数据库存储.

通过将所有图片存储在db而不是local(S3)中,我会丢失任何东西吗?

这导致我认为最好将图像存储在Amazon RDS.因此,我想知道:

用户将上传一般4张图片:mainPicThumb,mainPic,secondPicsecondPicThumb.每个人也都有田地namesize.为了提高效率,我应该将每种图片类型放在不同的表格中,还是不应该出问题?我的意思是,如果我将图片分成不同的表格,我会获得更快的访问速度和搜索速度,还是获得任何收益?

大多数用户查询也会返回10个不同的Thumb图像

我正在使用PHP构建我的后端并使用ORM(Propel).

我将不胜感激任何指导/建议.

小智 6

我在AWS上有针对库存摄影网站的架构解决方案,这些网站存储了TB的数百万个图像,希望根据您的要求分享AWS中的一些最佳实践:

P1)将原始图像文件存储在S3 Standard选项中

P2)将可再现的图像(如拇指等)存储在S3 Reduced Redundancy选项(RRS)中以节省成本

P3)根据查询的复杂性,可以将包含S3 URL的图像的元数据存储在Amazon RDS或Amazon DynamoDB中.查询Amazon RDS中的条目.如果您的查询很复杂,通常的做法是将元数据存储在Amazon CloudSearch或Apache Solr中.

P4)使用Amazon CloudFront向低延迟用户表达您的意见.


Nie*_*jes 5

您在计算成本时犯了一些基本的计算错误。将数据存储在关系数据库中永远不会比将数据存储在完全优化的平面数据存储系统中便宜。

在 S3 中存储数据时,您将只按实际存储使用量和实际网络使用量计费。这是整个月平均的精确数据量,每 GB/mth 0.095 美元(低层应用从 1TB/mth 开始),加上每 10000 个外部 GET 请求 0.004 美元,再加上每 GB 数据传输到 Internet(低层)的 0.120 美元应用从 10TB/mth 开始)。

在 RDS 中存储数据时,您需要为实例支付每小时费用,加上每 GB/月 0.125 美元的存储费用,再加上底层存储上的每次 IO 操作成本。单个查询,请求数兆字节的二进制数据,很容易触发成百上千的 IO 操作 - 如果结果恰好被缓存,则不会触发。很难预测 IO 使用情况,除了根据定义它与执行的查询量和传输的数据量没有线性关系。作为指导,我刚刚检查了一个 LAMP 服务器,因为它是半夜,负载大约为 0.60,并且它在其存储磁盘上每秒持续处理大约 50~150 个 IO 操作(操作系统、交换和 /tmp 在另一个上) ,而几乎没有做任何事情。

对于存储在 RDS 中的数据,实际检索数据仅意味着您已将其传输到您的 EC2 实例或其他访问方式。然后,您仍然需要承担实际处理请求并将数据从那里继续传输到互联网的全部费用。

总结:将数据存储在 RDS 而不是 S3 中总是会更昂贵。很难预测它是否会贵 10、100 或 1000 倍。使用 S3 存储文件,这就是 Simple Storage Service 的用途。这也将是迄今为止,FAR更好的性能,特别是如果你把它绑定到CloudFront的利用其高速缓存的边缘位置。

(所有提到的价格都假设最便宜的亚马逊地点 - 其他地方的价格可能略有不同)