我想實現一個基於SQLite的數據庫,可以存儲100GB文件夾的複雜子結構(期望50-100K文件)的完整結構。數據庫的主要目的是快速查詢此文件夾的各個方面(總大小,任何文件夾的大小,文件夾的歷史記錄及其所有內容等)。存儲文件夾系統的數據庫模式的選擇
但是,我意識到,要找到所有文件的文件夾裏面,包括它的所有子文件夾也不是沒有可能遞歸查詢,如果我只是做一個「文件」表只是一個parent_directory場。我認爲這是我想要的代碼中最重要的功能之一,因此我已經考慮了兩個模式選項,如下圖所示。
在模式1中,我將所有文件名存儲在一個表中,並將目錄名存儲在另一個表中。他們都有一個「parentdir」項目,但也有一個文本(顯然文本/ blob是相同的sqlite)字段稱爲「FullPath」,將保存從根目錄到特定文件/目錄的整個路徑(如/ etc/ABC/DEF /哇/ longpath/test.txt的)。我不假設最大的子文件夾限制,所以這理論上可以是允許多達30K個字符的字段。我的想法是,如果我想要屬於任何父級的所有文件或目錄,我只需查詢此字段上父級的完整路徑,並獲取文件標識
在模式2中,我只存儲文件名,文件標識和DirNames,分別在目錄和文件表中的DirID。但是在名爲「Ancestors」的第三個表中,我爲每個文件存儲了每個目錄的一組條目,這是它的祖先(所以在上面的例子中,test.txt將有5個條目,指向文件夾的DirID等, abc,def,wow和longpath)。然後,如果我想要任何文件夾的全部內容,我只需在此表中查找DirID並獲取所有文件標識。
我可以看到,在方案1中的主要限制可能是全文檢索可變長度的文本列模式2的主要限制是,我可能要增加大量的條目對於那些文件,並在深埋在100個目錄之內。
什麼是最好的這些解決方案?有沒有更好的解決方案,我沒有想到?
您可能感興趣的http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html –
哇,這正是我想要的!因此,我展示的第二種解決方案與他所描述的有些類似,但他也描述了非常優雅的觸發器,它可以在沒有任何外部代碼消毒的情況下保持所有數據的完全清晰!我想我會去那個設計! – user930916