我的情景取决于情况。我正在写一个类似于iTunes,Windows Media Player和Winamp的音乐库组织者/播放器。我已经拥有了所有的ID3标签代码,现在我已经为数据库做好了准备。根据我的发现,读取数据库要快得多,检查文件的MD5哈希并将其与存储的数据进行比较,如果歌曲发生变化则更新数据库,而不是直接从每首歌曲的ID3标签上读取。所以说我刚刚启动并运行了一个sqlite数据库。
现在我不确定是否应将专辑封面存储在数据库或文件系统中。我有自动将相册艺术重新调整为300x300像素的代码,因此所有图片的文件大小通常约为15-30 KB。对于正常大小的图像和14.8 MB大小的图像,情况确实如此。因此,平均而言,我需要存储22.5 KB大小的图片。
这是情境依赖片;我需要决定使用100首歌曲和20,000首歌曲的音乐库来提高效率。假设所有歌曲都有专辑封面,哪种方法会更好:sqlite数据库或使用子目录的NTFS文件系统,以加快加载时间
答案 0 :(得分:0)
一般来说,数据库在存储BLOB方面并不是很好,但是你已经大大减少了BLOB的大小,这使得它不再是一个问题。
另外,请记住,每首歌曲存储一个blob可能会完全浪费空间,因为在多首歌曲共享同一个blob的情况下,最有可能这样做。
由于图像尺寸较小,我会将它们存储在数据库中,并调整模式以确保您不会在其中存储具有相同图像的多个blob。这也使得确保数据一致性变得更加容易,因为您不会将一部分数据放在一个地方(数据库)以及文件系统上的一些其他数据,用户可能会意外删除它。
一旦你说了相当大的blob,你可能应该将它们存储在磁盘而不是数据库中。
答案 1 :(得分:0)
当您将图像放入包含其他歌曲数据的同一个表格中时,对歌曲数据的所有查询也必须从磁盘加载一些图像数据。
如果将图像放入与主歌曲表具有1:1关系的另一个表格中,则可以避免此效果。
如果将该表放入到ATTACH
到主数据库的单独数据库中,则可以将图像数据分离得更多;这甚至允许您以不同方式配置缓存。
这应该与存储在磁盘上的图像没有速度差异。
如果您经常需要将图像导出到文件(用于编辑或在外部程序中显示),则可能更容易将图像存储在文件系统中。
此外,将图像作为文件可以使增量备份更容易(如果这是一个问题)。