我应该使用sqlite还是NTFS来存储图片?

3
我的情景是根据具体情况而定的。我正在编写一个音乐库组织者/播放器,类似于iTunes、Windows Media Player和Winamp。我已经完成了所有ID3标签代码的编写,现在准备处理数据库。我发现,读取数据库、检查文件的MD5哈希值并将其与存储的哈希值进行比较,并在歌曲更改时更新数据库,比直接在每个歌曲的ID3标签上加载要快得多。所以,我刚刚建立了一个SQLite数据库。
现在我不确定应该将专辑封面存储在数据库中还是文件系统中。我有代码可以自动调整专辑封面大小为300x300像素,因此所有图片的文件大小通常在15-30 KB左右。这对于普通大小的图像和14.8 MB大小的图像都是正确的。因此,平均每张图片的大小约为22.5 KB。
这里是情境相关的部分;我需要决策在100首歌曲和20,000首歌曲的音乐库中都能高效运行。假设所有歌曲都有专辑封面,哪种方法更好:使用SQLite数据库还是NTFS文件系统,使用子目录实现更快的加载时间?

好的,另一件需要考虑的事情是读取时间。我每次只会读取一张图片。从数据库还是NTFS文件系统中读取图像更好呢?如果选择数据库或文件系统时有5000张图片和5张图片之间的差异,这会有影响吗? - user1766329
2个回答

0

一般来说,数据库并不擅长存储BLOBs,但是您已经大大减小了BLOBs的大小,这使得它不再是一个问题。

此外,请记住,为每首歌曲存储一个blob可能会完全浪费空间,因为您很可能处于多首歌曲共享同一blob的情况下。

由于图像尺寸较小,我建议将它们存储在数据库中,并调整架构以确保您不会在其中存储具有相同图像的多个blob。这也使得确保数据一致性变得更加容易,因为您不必将部分数据存储在一个地方(数据库)而将其他数据存储在用户可能意外删除的文件系统上。

一旦您需要存储相当大的blobs,最好将它们存储在磁盘上而不是数据库中。


0

当您将图像放入包含其他歌曲数据的同一表中时,所有对歌曲数据的查询也必须从磁盘加载一些图像数据。

如果您将图像放入与主要歌曲表具有1:1关系的另一个表中,则可以避免此效果。 如果您将该表放入单独的数据库中并将其ATTACH到主数据库中,则可以进一步分离图像数据;这甚至允许您以不同的方式配置缓存。 这对于存储在磁盘上的图像应该没有速度差异。

如果您经常需要将图像导出到文件(用于编辑或在外部程序中显示),那么最好将图像直接存储在文件系统中。
此外,将图像作为文件存储将使增量备份更加容易(如果这是一个问题)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接