我完全清楚通常不建议将图像存储为数据库中的blob。但我最近遇到了this网站,记录了sqlite在读取和写入数据库(blob)时数据库的性能提升。简而言之,对于小文件,它现在比文件存储快大约35%。由于旧设备使用旧版本的db,因此需要一些时间才能从中受益。然而,我未来面临的问题是:
这会改变在android中存储图像的首选方式吗?现在更好的做法是不仅在数据库中存储uris而且还存储小图像,并且只在需要从文件存储中加载更高分辨率的图像时才会这样做吗?
答案 0 :(得分:1)
对于小文件来说,现在大约比文件存储快35%
如果您阅读该文章,它会说:“实际时间因硬件,操作系统和实验细节而异,并且由于实际硬件上的随机性能波动。”即使在Android测试中,它也直接使用SQLite C API。
这会改变在android中存储图像的首选方式吗?
可能,但不仅仅基于那篇文章。
首先,需要以Android开发人员访问数据库的方式重现测试:通过Android的基于Java的SQLite API(SQLiteOpenDatabase
等)。
其次,速度只是一个考虑因素。记忆是另一回事。在数据库中存储图像将比将同一图像存储为文件消耗更多的堆空间。对于文件,Bitmap
和BitmapFactory
可以使用流来写出和读取文件(PNG,JPEG等)。这不是SQLite案例中的一个选项。在那里,PNG / JPEG /将是byte[]
,占用堆空间并帮助分割堆。
第三,团队可能需要的其他功能(例如,FTS索引,Android加密的SQLCipher)可能会影响性能,需要进行测试。
将图像直接存储在数据库中还有其他好处,例如更容易删除数据(与删除行和删除相应的图像文件相比)。在假设基于BLOB的图像存储是它们的净增益之前,处理小图像的团队应该在各种硬件上进行彻底的性能测试。