SQLite的Blob或文件系统用于图像?

6

我正在构建一个基于单个表格的应用程序,其中一列包含文本。偶尔,相邻的列会有一个图像。在SQLITE中将此图像存储为BLOB更好,还是应该将它们存储在文件系统中,并从我的程序中引用它们?

谢谢!


请澄清一下 - 这是为 iPhone 应用程序吗? - AnonJr
5个回答

3

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


1
文件将使图像的加载更加高效。如果您使用[UIImage imageNamed:@"blah.png"],它将把图像加载到可清除的RAM中,并根据需要从文件中加载/卸载它(即当它不再可见且内存紧张时,它会被清除,然后在再次可见时重新加载)。 - Gabe

3
假设您要使用的图像不是非常大且数量不是过多,我建议使用数据库。 我目前在几个不同的Windows Mobile和WinCE设备上使用Sqlite数据库,存储了超过10,000个小图像作为blob,并且运行良好。 我看到类似于我们的软件在同一硬件上运行,使用基于文件的图像加载会慢得多。 当然,这是在WinCE和不同的软件上进行的测试,因此这不是最佳测试。 我发现单个数据库比许多图像文件更容易处理。

2

编辑:

我没有意识到您特别指的是iPhone环境。在这种情况下,出于将所有内容放在一个地方的简单性考虑,我会使用数据库。您不必担心可扩展性,因为您的iPhone不会像服务器一样被用来。

原始回复:

我没有任何链接支持这一点,但我记得在几项研究中读到“截止”的大小为1 MB以获得blob的效率。但是,如果磁盘阵列足够快,则可以将其提高到10 MB。完全取决于系统。

因此,基本上,根据您的效率截止时间,任何小于该值的数据都应该由数据库提供服务,任何大于该值的数据都应该在数据库中进行索引并保留在文件缓存中。


他正在使用 iPhone,因此磁盘本身无法升级。 - Kevlar

2

我喜欢将图像存储在文件系统中,因为UIImage可以自动缓存图像文件并在必要时自动从内存中卸载它们。只需小心不要更改或删除加载到UIImage中的图像文件,否则会导致崩溃或其他奇怪的错误。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接