2012-05-26 61 views
1

我想在MongoDB中實現一個像集合這樣的次要文件系統。在MongoDB集合中查找一個字符串

所以說,我的目標是這樣的

{ 
    "\":{ 
     'autoexec.bat':{ 
      name:'autoexec', 
      filetype:'bat', 
      size:1302 
    }, 

    'users':{ /* its own tree */ }, 
    'windows':{ 
     'system':{ 
      'autoexec.bat':{ 
       name:'autoexec', 
       filetype:'bat', 
       size:1302123 
      } 
     } 
    } 
} 

我想知道如何找到最effiecient方式「AUTOEXEC.BAT」一詞,而且對文件樹是有執行什麼更好的辦法在Node.js或C++中是一樣的嗎?我希望實現搜索等功能。

回答

2

我會說:不要在一個巨大的文檔中做到這一點。讓每個文件成爲一個集合中的自己的文檔,並引用父代和(可能)子代。幾乎所有的操作現在都是微不足道的。您只需考慮有效的方式來讀取/刪除整個樹。

+0

讀取/刪除整棵樹將被刪除的第一個元素和繁榮其餘的走了,但仍然..如何找到文件?有沒有可能的方法? – ShrekOverflow

+0

沒有繁榮。其餘的將成爲孤兒(當每個文件是一個單獨的文件)。 –

+0

嗯,哦,是的!我在想方式太javascript了.. – ShrekOverflow

0

上週在MongoNYC Kyle Banker舉了一個關於模式設計的好例子talk。我認爲你的問題與他的音樂體裁層次的第一個例子非常相似。

實際上,每個文件在集合中都有一個文檔。它會有一個父字段來標識它的直接父(它是你的情況下的目錄)和它的所有祖先的數組。

,現在變得容易的查詢是 - 哪個目錄是 文件「AUTOEXEC.BAT」 - 列出目錄「foo」的所有文件 - 列表目錄FOO遞歸的所有文件(與「富」的所有文件它的祖先

不要忘記,你也可以選擇將完整路徑名保存到文件/目錄以及其基本名稱,如果字段被索引,允許通過路徑的前導部分進行搜索。它不僅僅是文件名,它也將是唯一的。

一如既往,關鍵信息是您需要查詢此集合的所有方式以及性能和負載預期。如果沒有這一點,可以很容易地選擇一個模式,以後會給你一些挑戰。

相關問題