1

我想在 MongoDB 中实现一个像 collection 这样的小文件系统。

所以说我的对象看起来像这样

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

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

我想知道如何以最有效的方式找到术语“autoexec.bat”,对于文件树,还有没有更好的方法在 Node.js 或 C++ 中实现它?我希望实现搜索等功能。

4

2 回答 2

2

我会说:不要在一份巨大的文件中这样做。让每个文件成为集合中自己的文档,并引用父级和(可能)子级。现在几乎所有的操作都是微不足道的。您只需要考虑读取/删除整个树的有效方法。

于 2012-05-26T15:50:57.393 回答
0

上周在 MongoNYC,Kyle Banker通过示例进行了关于模式设计的精彩演讲。我认为您的问题与他的第一个音乐流派等级示例非常相似。

实际上,每个文件都会在集合中包含一个文档。它将有一个 parent 字段来标识其直接父级(在您的情况下它所在的目录)和一个包含其所有祖先的数组。

现在变得容易的查询是 - 文件“autoexec.bat”在哪个目录 - 列出目录“foo”中的所有文件 - 递归地列出目录 foo 中的所有文件(所有祖先中带有“foo”的文件。

不要忘记,您还可以选择将完整路径名保存到文件/目录及其基本名称。如果字段被索引,这允许通过路径的前导部分进行搜索。它也将是唯一的,而不仅仅是文件名。

与往常一样,关键信息是查询此集合以及性能和负载预期所需的所有方式。没有它,很容易选择一个稍后会给您带来一些挑战的模式。

于 2012-05-26T17:59:50.047 回答