Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在数据库中存储大量图像?好的经历?_Postgresql_Blob_Blobstore - Fatal编程技术网

Postgresql 在数据库中存储大量图像?好的经历?

Postgresql 在数据库中存储大量图像?好的经历?,postgresql,blob,blobstore,Postgresql,Blob,Blobstore,我正在编写一个应用程序,它将存储大量的图像(可能还有视频)文件。在上传之后,它们将立即被推到一些云服务CDN上,以实际服务于公众。其想法是将图像存储在可靠的可备份存储中。我预计将有200000个对象,每个对象最大10KB,可能更少的视频文件只有几MB 默认情况下,我会去Postgres,这是可以的 这是一个明智的想法吗 这会使备份数据库成为一场噩梦吗。经验 有可靠性问题吗 这会影响数据库其他部分的性能吗?请记住,对于每个图像,db只会被命中一次或两次 我的经验仅限于SQL server,但我的

我正在编写一个应用程序,它将存储大量的图像(可能还有视频)文件。在上传之后,它们将立即被推到一些云服务CDN上,以实际服务于公众。其想法是将图像存储在可靠的可备份存储中。我预计将有200000个对象,每个对象最大10KB,可能更少的视频文件只有几MB

默认情况下,我会去Postgres,这是可以的

  • 这是一个明智的想法吗
  • 这会使备份数据库成为一场噩梦吗。经验
  • 有可靠性问题吗
  • 这会影响数据库其他部分的性能吗?请记住,对于每个图像,db只会被命中一次或两次

我的经验仅限于SQL server,但我的数据库中有数百万个大于10KB的PDF文件,这些文件的性能仍然很好。当然,索引是必需的。对于如此大量的数据,完全数据库备份所需的时间不会超过预期。同样,这是针对MS-SQL server的

我有在Oracle和MySQL中以这种方式在数据库中存储图像的经验。性能和可靠性不是问题。备份是非常重要的。您的备份将变得非常大。由于备份既耗时又昂贵,因此节省空间可能是一个好主意。如果这意味着只需从数据库中删除图像,就可以将数据库缩小80%,那么最好将它们存储在其他位置。备份单独的文件效率更高,因为您可以轻松地创建只包含新的和修改过的图像的增量备份。

我有使用PostgreSQL的经验,将图像存储为ByteA(类似BLOB的数据类型),有很好的经验,并将图像存储在“”(文件系统中的图像,MySQL和PostgreSQL等数据库中的元数据),我不推荐

有3个方面或架构考虑因素可以帮助我们做出决策:

  • 是否统一解决方案?今天,当我们看到图像体积(图像的大小和数量)不断增长时,在所有应用程序中,“统一解决方案”都是我们的目标。示例:是Wikipedia的统一和专用解决方案
  • 直接存储还是间接存储?像旧的“双解决方案”一样,不将映像存储到SQL表中,有些解决方案可以使用外部数据库或外部数据指针。。。在PostgreSQL上,BLOB数据类型具有间接存储(生成单独的备份),BYTEA数据类型为直接(使用表进行备份)。选择需要技术和性能方面的考虑
  • 原始图像还是经过处理的图像?我们需要在“原始图像”和“已处理图像”(如缩略图)之间进行一些区分,它们需要数据库存储(用于缓存!),但不需要备份
  • 我建议:

    • 在表中存储为blob(具有间接存储的二进制大对象):用于原始图像存储,但单独备份。见等

    • 以bytea(或blob)的形式存储在单独的数据库中(使用):对于原始图像存储,在另一个(统一的)数据库中。在这种情况下,我优先选择bytea,但blob几乎相同。分离数据库是“统一映像Web服务”的最佳方式

    • 在您的表中存储为bytea(具有直接存储的字节数组):用于缓存处理过的图像(通常是缩略图)。缓存小图像以将其快速发送到web浏览器(避免渲染问题)并减少服务器处理。缓存基本元数据,如宽度和高度。数据库缓存是最简单的方法,但请检查您的需求和服务器配置(例如Apache模块):可能更好,比较性能。请记住,它是一个(统一的)web服务,然后可以存储在一个单独的数据库中,而无需备份,为许多表提供服务。另见等


    可能重复的请重新阅读,您的问题不是真正可以客观回答的,您正在征求意见。请求体验。。。那很好,对吗?@Mat CWs怎么了?我认为我的问题(包括关于不向DB提供服务的部分)完全不同。哦,好吧。