Kfi*_*ods 5 database tree bigdata mongodb data-structures
我正在开发一个桌面应用程序,它很像WinDirStat或voidtools'Everything - 它映射硬盘驱动器,即从目录树中创建一个深层嵌套的字典.
然后,桌面应用程序应将目录树存储在某种数据库中,以便可以使用Web应用程序从根目录深度级别浏览它们.
假设两个应用程序暂时在同一台机器上本地运行.
我想到的问题是如何构建数据以及应该使用什么数据库,考虑:1)RAM消耗应该合理2)准备好在Web应用程序中查看目录所需的时间应该是最小
PS - 我的初始方法是将每个文件系统节点分别序列化为JSON并将每个节点插入到Mongo中,并将对象引用链接到它们的子节点.这样,Web应用程序可以根据用户需求轻松加载数据.但是,我担心为Mongo制作这么多(平均一百万个)独立插件需要花费很多时间; 如果我进行批量插入,这意味着我必须将每个批量保留在内存中.
我还考虑将整个树转储为一个深度嵌套的JSON,但数据太大而不能成为Mongo文档.GridFS可以用来存储它,但是我会在web应用程序中加载整个树,即使深层节点可能不感兴趣.
鉴于您的要求:
我会考虑以下内容。
以这个目录为例
C:\
C:\X\
C:\X\B\
C:\X\file.txt
C:\Y\
C:\Y\file.pdf
C:\Y\R\
C:\Y\R\file.js
Run Code Online (Sandbox Code Playgroud)
在 JSON 中,它可能表示为:
C:\
C:\X\
C:\X\B\
C:\X\file.txt
C:\Y\
C:\Y\file.pdf
C:\Y\R\
C:\Y\R\file.js
Run Code Online (Sandbox Code Playgroud)
正如您所指出的,后者不能很好地适应大型目录结构(我可以直接告诉您,浏览器不会欣赏 JSON blob,即使它代表的是具有数千个文件/文件夹的适度目录)。前者虽然类似于一些实际的文件系统并且在正确的上下文中高效,但与 JSON 之间的转换是一件痛苦的事情。
我的建议是将每个目录分解为一个单独的 JSON 文档,因为这将解决所有三个问题,但是没有什么是免费的,这会增加代码复杂性、每个会话的请求数量等。
上述结构可以分解为以下文件:
{
"C:": {
"X": {
"B": {},
"file.txt": "file information..."
},
"Y": {
"file.pdf": "file information...",
"R": {
"file.js": "file information..."
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中每个文档代表一个目录或文件及其(如果是目录)其直接子 ID。子项可以使用其 ID 进行延迟加载,并在 UI 中附加到其父项。实施良好的延迟加载可以将子节点预加载到所需的深度,从而创建响应速度非常快的 UI。RAM 使用量极小,因为您的服务器只需处理每个请求的少量有效负载。与单文档方法相比,请求数量确实大幅增加,但同样,一些巧妙的延迟加载可以聚集请求并减少总数。
更新1:我在回答之前忽略了你的倒数第二段,所以这可能或多或少是你的想法。为了解决文档过多的问题,文档内的某种级别的集群节点可能是合适的。我现在得走了,但我会考虑一下。
更新 2:我创建了我提到的集群概念的简化版本的要点。它不考虑文件,只考虑文件夹,并且不包含更新文档的代码。希望它能给你一些想法,我会根据自己的目的继续更新它。
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |