我的Mac应用程序保持一个对象(包含核心数据)的集合,每个对象都有一个封面图像,创建时我将其分配给一个UUID。我原本一直将封面图像作为字段存储在我的Core Data存储中,但最近开始将它们存储在文件系统中的磁盘上。图像缓存的平面或嵌套目录结构?
最初,我将这些封面存储在一个平面目录中,使用UUID命名文件,如下所示。这让我O(1)抓取,因为我知道究竟在哪里看。
...
/.../Covers/3B723A52-C228-4C5F-A71C-3169EBA33677.jpg
/.../Covers/6BEC2FC4-B9DA-4E28-8A58-387BC6FF8E06.jpg
...
我看的方式与其它应用程序处理这个任务,不过,注意到一个多层次的方案,如下(例如)。这仍然可以在O(1)时间内实施。
...
/.../Covers/A/B/3B723A52-C228-4C5F-A71C-3169EBA33677.jpg
/.../Covers/C/D/6BEC2FC4-B9DA-4E28-8A58-387BC6FF8E06.jpg
...
可能是这样做的原因是什么? OS X是否限制目录中文件的数量?从磁盘检索它们的速度有些快吗?这会使用于计算文件名的代码更加复杂,所以我想知道是否有这样做的好理由。
谢谢,我一直在思考这些问题。我将UUID设置为'NSMutableString',然后在前两位和后两位字符后面插入'/',所以现在我的文件名也缩短了4个字符。 – Dov 2011-06-16 12:44:39
虽然有太多的处罚可以分解吗?使用2个2位十六进制数字目录的方案每个意味着创建至多256^2个目录,这意味着(假设均匀分布)每个文件实际上都有自己的目录。 – Dov 2011-06-16 12:56:06
这取决于您计划存储多少个文件,但是,您可以从1位开始,然后如果数量太大,请使用第二位数字创建子目录,依此类推。 – Clinton 2011-06-16 13:07:07