Android:将图像保存到Sqlite数据库中

5
我想知道在SQLite数据库中将图像存储为BLOB是否是一个好主意?有人存储图像(blob)的性能经验吗?
我的Android应用程序是一个小型应用程序,需要处理20至100张图像(每张图像100 KB到1 MB)。最坏的情况:我认为我的数据库可能会达到100 MB的大小。这会对数据库性能产生重大影响吗? 平均情况:我猜我的应用程序的普通用户有40张200 KB的图像,因此数据库的大小约为8 MB。 顺便说一下,当然,数据库也存储其他“普通”数据,因此它不仅仅是一个图像数据库:)
将存储在存储设备(内部或SD卡)上的图像文件路径存储为更好的方法吗?我猜从数据库检索图像文件路径并打开和加载图像文件会稍微慢一些(但不是真正显著的,因为我一次只需要加载两张图片)。
第二个问题: 如果我使用第二种方法(在数据库中存储图像文件的路径并加载图像文件): 在这种情况下,磁盘缓存(DiskLruCache)是否有用?它会带来显著的性能提升吗?我的理解是磁盘缓存将直接从存储中加载位图(而不是编码的jpg或png),因此磁盘缓存将直接从存储中加载位图,我的应用程序将节省解码图像(jpg或png)的时间。是这样吗? 顺便说一下,在“数据库方法”中,我已经将图像作为位图存储。所以对我来说似乎与磁盘缓存类似,不是吗?
编辑: 我忘了告诉你,我需要在设备上持久存储图像。我不是在谈论缓存图像,例如我从Web服务检索的图像...

为什么不将图像保存到缓存文件夹中? - Tomer Mor
  1. 用户可以在Android应用程序设置中清除缓存。
  2. 在缓存文件夹中保存图像与在任何其他文件夹中保存文件的性能相同,不是吗?
  3. 我喜欢事务的概念,我可以通过将图像存储在数据库中来使用它。
- sockeqwe
你可以将文件保存到任何你喜欢的文件夹或外部存储器中,有关更多信息请阅读http://developer.android.com/guide/topics/data/data-storage.html。不建议将图像保存到数据库中。 - Tomer Mor
1个回答

3
我的猜测是,如果您在数据库中存储这么多信息,特别是当您检索图像本身时,数据库将变得明显缓慢。
另一方面,据我了解,每个用户在应用程序安装后都会下载与他相关联的图像。这是使用库的完美场所,另一个SO用户在我之前几天提出的问题中向我推荐了Universal Image Downloader。这里是我谈论的线程的链接。
该库使用磁盘缓存,但为您抽象出所有复杂性(希望如此,我还没有尝试过,但它似乎很有前途)。

通用的图像下载器看起来非常有趣和有前途。谢谢你的提示!事实上,我计划为我的应用程序实现类似的功能(特别是在加载真正的图像时显示“空”图像),但我想我会先尝试这个库。然而,在继续之前,了解一下数据库方法是否更适合我的应用程序会很好。 - sockeqwe
@sockeqwe我认为我在我的答案中已经涵盖了这一点,但再说一遍:数据库中的所有东西都会有性能问题,您将不得不自己实现更多的自定义逻辑。基本上我观察到,在某些情况下(特别是在读取大块数据时),Android中的数据库表现要比普通文件系统差得多。此外,UID还有很好的优点,比如说最多可以缓存多少等等。 - Boris Strandjev

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