【问题标题】:SQLITE Blob OR file system for images用于图像的 SQLITE Blob 或文件系统
【发布时间】:2009-04-16 18:38:53
【问题描述】:

我正在构建一个基于单个表格的应用程序,该表格带有一个带有文本的列。有时,相邻的列会有图像。将此图像存储为 SQLITE 中的 BLOB 是否更好,或者我应该将它们存储在文件系统中并从我的程序中引用它们。 谢谢!

【问题讨论】:

  • 只是为了澄清 - 这是针对 iPhone 应用的,对吗?

标签: iphone sqlite filesystems


【解决方案1】:

从长远来看,文件会给您带来更少的问题。您真的不想从数据库服务器提供大量文件,尤其是在您扩展时

【讨论】:

  • 文件将更容易有效地加载图像。如果您使用 [UIImage imageNamed:@"blah.png"] 它会将图像加载到可清除的 RAM 中并根据需要从文件中加载/卸载它(即当它不再可见并且您的内存紧张时,它会被清除然后再次可见时重新加载)
【解决方案2】:

假设您要使用的图像不是非常大,并且我会使用数据库的图像数量不多。

我目前在几个不同的 Windows Mobile 和 WinCE 设备上使用 Sqlite 数据库,其中有超过 10,000 个小图像存储为 blob,它运行良好。

我看到与我们类似的软件使用基于文件的图像加载在相同的硬件上运行,而且速度明显较慢。当然,这是在 WinCE 和其他软件上进行的,所以这不是最好的测试。

我发现单个数据库比许多图像文件更容易使用。

【讨论】:

    【解决方案3】:

    编辑:

    没有意识到您专门针对 iPhone 环境。在这种情况下,我会使用数据库只是为了将所有内容放在一个地方。您不必担心可扩展性,因为它不像您的 iphone 将用作服务器或任何东西。

    原始回复:

    我没有任何链接来支持这一点,但我确实记得在几项研究中读到“截止”是 1 MB 以提高 blob 效率。但这可以通过足够快的磁盘阵列移动到 10 MB。完全取决于系统。

    所以基本上,考虑到您的效率截断,任何小于该值的数据最好由数据库提供,任何更大的数据,只需在数据库中建立索引并保留在文件缓存中。

    【讨论】:

    • 他用的是iphone,所以磁盘本身不能升级。
    【解决方案4】:

    我喜欢将图像保存在文件系统中,因为 UIImage 可以缓存图像文件并在必要时自动从内存中转储它们。请注意不要更改或删除加载到 UIImage 中的图像文件,否则您会遇到崩溃或其他奇怪的错误。

    【讨论】:

      【解决方案5】:

      这真的取决于您的应用程序。将图像存储在数据库中将使您的生活更轻松,因为您可以在一个点上轻松访问它们,而不是将它们放在可能丢失的单独文件中。另一方面,许多相当大的图像对于 SQLITE 数据库来说可能太多了。在您的情况下,我只会在数据库中引用它们。

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 2013-05-16
        • 2014-04-30
        • 1970-01-01
        • 2011-03-25
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多