我完全清楚,通常不建议将图像作为 blob 存储在数据库中。但我最近遇到了this网站记录了 sqlite 在向数据库读取和写入图像(blob)方面的性能提升。简而言之,对于小文件,它现在比文件存储快大约 35%。由于旧设备使用旧版本的数据库,因此需要一些时间才能让许多 Android 设备受益。尽管如此,我 future 面临的问题是:
这会改变 Android 中存储图像的首选方式吗?现在,在数据库中不仅存储 uri,还存储小图像,并且仅在需要时从文件存储加载更高分辨率的图像,这是一个更好的主意吗?
最佳答案
it is now roughly 35% faster then file storage, for small files
如果您阅读这篇文章,它会指出:“实际时间会根据硬件、操作系统和实验细节以及实际硬件上的随机性能波动而有所不同。”即使在 Android 测试中,它也直接使用 SQLite C API。
Will this change the preferred way of storing images in android?
有可能,但不仅仅基于那篇文章。
首先,需要以 Android 开发人员访问数据库的方式重现测试:通过 Android 的基于 Java 的 SQLite API(SQLiteOpenDatabase
等)。
其次,速度只是考虑因素之一。内存是另一个。将图像存储在数据库中将比将相同图像存储为文件消耗更多的堆空间。对于文件,Bitmap
和 BitmapFactory
可以使用流来写入和读取文件(PNG、JPEG 等)。在 SQLite 情况下这不是一个选项。在那里,PNG/JPEG/任何内容都将是一个 byte[]
,占用堆空间并帮助对堆进行 fragment 化。
第三,团队可能需要的其他功能(例如,FTS 索引、用于 Android 加密的 SQLCipher)可能会影响性能,需要进行测试。
直接将图像存储在数据库中还有其他好处,例如更容易删除数据(相对于必须删除行并删除相应的图像文件)。处理小图像的团队应该在各种硬件上运行全面的性能测试,然后再假设基于 BLOB 的图像存储对他们来说是净 yield 。
关于android - 在给定 sqlite 进度的情况下,在 Android 中存储图像的规范方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816028/