我想知道您对以下内容的看法:假设您有多个结构化二进制文件(数百个)和一个可以使用它们的库(创建,打开,读取,保存)。你将如何设计一个Android应用程序来包装它:
Would you pack all the binary files in the Zip archive
或 leave files separate in the application directory (subdirectory)
;
Would you use Room library to create links (Uri) to those files along with additional information like tags, titles, thumbnail images (also Uri)
或 access them directly and save the extra in metafiles
或 create a extra binary layer for each of the files to store the metadata (binaryWithMeta <- (metadata + binary))
答案 0 :(得分:3)
1)房间只是SQLite的一个包装,你很幸运,他们已经问过并回答了BLOB性能问题。
SQLite中的内部与外部BLOB
下面的矩阵显示了读取存储在单独文件中的BLOB所需的时间除以读取完全存储在数据库中的BLOB所需的时间。因此,对于大于1.0的数字,将BLOB直接存储在数据库中会更快。对于小于1.0的数字,将BLOB存储在单独的文件中会更快。
我们从上面的矩阵中推导出以下经验法则:
- 数据库页面大小为8192或16384,可为大型BLOB I / O提供最佳性能。
- 对于小于100KB的BLOB,当BLOB直接存储在数据库文件中时,读取速度会更快。对于大于100KB的BLOB,从单独文件读取的速度更快。
当然,您的里程可能会有所不同,具体取决于硬件,文件系统和操作系统。 在提交特定设计之前,仔细检查目标硬件上的这些数据。
来源:https://www.sqlite.org/intern-v-extern-blob.html,强调我的。
正如您所看到的,SQLite非常适合存储元数据,甚至是图像缩略图。
2)您的其他问题的答案取决于多种因素:
是的,需要某种抽象层来优化处理不同类型条件下的不同类型的文件。没有一个好的答案。
期待Stack Overflow上可能存在的不言自明的答案。