我正在编写一个应用程序,它将存储大量图像(可能还有视频)文件。上传后,他们会立即被推送到服务CDN的云端,以便向公众提供实际服务。我们的想法是将图像存储在一个可靠的,可回溯的商店中。我预计每个最多10KB的200,000个对象的顺序,以及几MB的视频文件可能更少。
默认情况下,我会去Postgres,documentation suggests可以。
答案 0 :(得分:5)
我有在Oracle和MySQL中以这种方式在数据库中存储图像的经验。性能和可靠性不是问题。备份是。您的备份将变得非常大。由于备份耗时且昂贵,因此节省空间可能是个好主意。如果这意味着只需从数据库中删除图像就可以将数据库缩小80%,那么将它们存储在其他位置可能是个好主意。备份单独的文件更有效,因为您可以轻松创建仅包含新图像和修改图像的增量备份。
答案 1 :(得分:3)
我有使用PostgreSQL的经验,将图像存储为ByteA(类似BLOB的数据类型),良好的体验,并将图像存储在“dual solution”(文件系统中的图像,MySQL和PostgreSQL等数据库中的元数据),我不推荐。
有三个方面或架构考虑因素可以帮助我们做出决定:
我建议:
在您的表中存储为 blob (具有间接存储的二进制大对象):对于原始图像存储,但是分离备份。请参阅Ivan's answer,PostgreSQL additional supplied modules,How-tos等。
以 bytea (或 blob )存储在分隔的数据库(DBlink)中:对于原始图像存储,在另一个(统一)数据库。在这种情况下,我预先 bytea ,但 blob 几乎相同。分离数据库是“统一图像Web服务”的最佳方式。
在您的表中存储为 bytea (带直接存储的BYTE数组):用于缓存已处理的图像(通常是缩略图)。缓存小图像以将其快速发送到Web浏览器(避免渲染问题)并减少服务器处理。缓存也是必要的元数据,如宽度和高度。数据库缓存是最简单的方法,但检查您的需求和服务器配置(例如Apache模块):store thumbnails at file system可能更好,比较性能。请记住,它是一个(统一的)Web服务,然后可以存储在没有备份的separete数据库中,为许多表提供服务。另请参阅PostgreSQL binary data types manual,tests with bytea column等
答案 2 :(得分:2)
我的经验仅限于SQL服务器,但我在数据库中有数百万个大于10KB的PDF文件,它仍然表现得非常好。当然索引是必需的。使用如此大量的数据,完整数据库备份的时间不会超过预期。同样,这是针对MS-SQL服务器的!