使用app:文件或sqlite数据库捆绑照片的最佳方法?
作者:互联网
假设我有一个应用程序,可以让您浏览Sqlite数据库中找到的汽车列表.当您点击列表中的汽车时,它会打开一个包含汽车描述和汽车照片的视图.
我的问题是:我应该将照片作为特定汽车行中的二进制数据列保存在数据库中,还是应该将照片放在资源目录中的某个位置?哪个更好?在二进制数据列的大小方面,Sqlite是否有任何限制?
数据库几乎只能读取并与应用程序捆绑在一起(因此用户不会插入任何汽车及其照片).
解决方法:
这是一个经过深思熟虑的决定.在我看来,这是个人品味的问题.非常像vim / emacs,windows / linux类的辩论.虽然不是那么激烈.
双方各有利弊.将它们存储在数据库中时,您无需担心文件名和位置.管理也更容易(你删除包含BLOB的行,就是这样).但是文件也很难访问,你可能需要以某种方式编写包装代码(例如,某些“download.php”链接).
另一方面,如果二进制数据存储为单独的文件,则管理更复杂(您需要首先通过构造文件名从磁盘打开正确的文件).在大型数据集上,当一个目录中的文件数量变得非常大时,您可能会遇到文件系统瓶颈(但这可以通过轻松创建子目录来防止).但是,如果数据存储为文件,则替换它们会变得非常容易.其他人也可以在不需要知道内部的情况下访问它(例如,想象一下在定制他/她的UI时乐趣的用户).
我确信还有其他要点,但我现在不想写太多……
我想说:想想你想对照片做什么操作(以及两种存储方法的局限性),并从那里做出明智的决定.没有太多可能出错的地方.
TX-Log和FS-Journal
在进一步调查中,我发现了一些更多信息
> SQLite使用事务日志
> Android在系统挂载点上使用YAFFS,在SD卡上使用VFAT.两者都是(尽我所知)没有经历过.
我不知道SQLite的TX-Log的确切实现,但是可以预期每个INSERT / UPDATE操作将在磁盘上执行两次写操作.我可能弄错了(这在很大程度上取决于事务的实现),但坦率地说,我不能轻易浏览SQLite源代码.我觉得我们在这里开始分裂头发(过早优化任何人?)……
由于两个文件系统(YAFFS和VFAT)都没有记录,因此您没有其他“隐藏”写入操作.
这两点支持文件系统.
请注意,这些信息是用一粒盐.我只浏览了YAFFS日记和sqlite事务日志的Google结果.我可能错过了一些细节.
标签:database,android,sqlite,image,binary-data 来源: https://codeday.me/bug/20190627/1299795.html