我的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