【问题标题】:Saving images from an sqlite table从 sqlite 表中保存图像
【发布时间】:2010-08-28 08:43:14
【问题描述】:

我有一个带有 500 条记录的 sqlite 表,每个记录都存储为 blob 数据的图像。图片都是大尺寸的,我需要为每张图片制作缩略图大小的版本,然后将它们保存在单独的字段中。

有谁知道完成这项任务的最佳方式是什么?

另一个问题 - 是否建议使用单独的表来存储图像?

提前致谢

【问题讨论】:

  • 首先,不要将图像存储在数据库中。
  • 为什么不呢?很多人似乎都赞成它。
  • @hanumandev:将它们存储在文件系统中并将 URL 放入数据库中。
  • @Jauzsika,@0A0D:我认为最公平的说法是这里有两套力量,一套说“将所有数据放入数据库”(为了保持一致性),另一套说“保持大数据输出”(为了速度)。对于 500 行(仅此而已?),除非数据真的很大,否则不需要将数据拒之门外。 SQLite 是一个面向列的数据库,所以 BLOB 并不那么昂贵(它不像你会查询它们……)
  • @Donal Fellows 把图片放在外面很简单。今天一小排,明天一百万。然后你会非常头疼,每天都想把它扔掉。当您必须修复数据库时,甚至更大。

标签: database-design sqlite blob


【解决方案1】:

最简单的方法是首先进行查询以获取所有要处理的行键,但没有 BLOB 数据。然后遍历该列表(不是在 SQL 中)并从特定行获取 BLOB 数据,通过任何方式生成缩略图,然后将其写回该行的缩略图列。这可能需要一些时间,但至少您不必担心达到内存限制或其他此类令人沮丧的废话。当您可以确定没有其他东西正在使用数据库时这样做是个好主意,这样您就可以避免担心事务,一旦您完成了一次,更新您的行插入/更新代码以便保留缩略图在处理过程中保持最新,而不是作为单独的批处理步骤。

至于图像是否应该在数据库中,那很好。缩略图很可能应该是,但图像数据本身可能相当大(尤其是有更多行),因此可能应该作为单独的文件存在,只有数据库中的文件名。您需要在正常情况下更快地处理数据的能力(不包含所有图像数据)与保持所有数据一致的能力(如果图像数据中出现问题,很容易陷入问题)之间取得平衡。我无法真正为您回答这个问题,因为它需要对应用程序有更深入的了解——这是你的工作——但我希望这能告诉你在做出决定时应该考虑什么。

【讨论】:

    【解决方案2】:

    正如 Jauzsika 所说,不要将图像存储在数据库中,但是如果您有包含图像的数据库,您可以遍历所有表并检查哪一列是 BLOB,然后只需遍历所有行 - 从单元格获取数据并且您有图像(好的,数据 - 但是当你得到数据时很容易创建图像);-)

    我知道,我的英语语法很棒。

    检查:http://www.sqlite.org/faq.html#q7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2010-12-31
      相关资源
      最近更新 更多