我想在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 ++中实现它?我希望实现搜索等功能。
答案 0 :(得分:2)
我会说:不要在一个巨大的文件中这样做。让每个文件成为集合中的自己的文档,引用父项和(可能)子项。现在几乎所有的操作都是微不足道的。您只需要考虑有效的方式来读取/删除整个树。
答案 1 :(得分:0)
上周在MongoNYC上,Kyle Banker通过示例给出了一个很好的talk架构设计。我认为你的问题与他的第一个音乐流派等级的例子非常相似。
实际上,每个文件都会在集合中包含一个文档。它将有一个父字段来标识它的直接父级(在你的情况下它所在的目录)和它的所有祖先的数组。
现在变得容易的查询是 - 文件“autoexec.bat”中的目录是什么 - 列出目录“foo”中的所有文件 - 在目录foo中递归列出所有文件(所有文件在其祖先中都带有“foo”。
不要忘记,您还可以选择将完整路径名保存到文件/目录及其基本名称。如果字段被索引,则允许通过路径的前导部分进行搜索。与文件名不同,它也将是独一无二的。
与往常一样,关键信息是您查询此集合以及性能和负载期望所需的所有方法。如果没有这个,可以很容易地选择一个模式,以便稍后给你一些挑战。