当前位置:  开发笔记 > 数据库 > 正文

将目录层次结构存储在键值数据存储中

如何解决《将目录层次结构存储在键值数据存储中》经验,为你挑选了1个好方法。

什么是将目录层次结构/树存储在键值数据库中的干净/有效方法(在我的情况下是MongoDB但是其中任何一个)?

例如树结构

- Cars 
   + Audi 
   + BMW
      - M5
   + Ford
- Color
   + Red
      - Apple
      - Cherry
   + Purple
- Funny

我现在使用的方法,每个对象链接到它的父级

{ 
  dir: "red"
  parent-dir: "color"
}

这使得插入和重新排序树的任何方面非常有效/快速(例如,如果我想将Red及其所有子项移动到Cars目录中).

但是当我想要递归地给定目录的所有子目录及其子节点时,这种方法很糟糕.为了使解析有效,我可以有一个结构

{ 
  dir: "red"
  children: "audi, bmw, ford"
}

{ 
  dir: "bmw"
  children: "m5"
}

但是如果我想修改树,需要触摸和修改一大堆对象.

是否有其他方法可以在KV存储中存储目录结构?



1> Frunsi..:

您当前使用的方法称为邻接列表模型.

在(关系)数据库中存储分层数据的另一种模型是嵌套集模型.它在SQL数据库中的实现是众所周知的.另请参阅本文以了解修改后的预订树遍历算法.

一个非常简单的方法:您可以存储每个对象的路径 - 在NOSQL数据库中查询树应该很容易:

{ path: "Color", ... }
{ path: "Color.Red", ... }
{ path: "Color.Red.Apple", ... }
{ path: "Color.Red.Cherry", ... }

当删除或重命名节点时,必须更新某些路径.但总的来说,这种方法看起来很有希望.您只需要保留一个特殊字符作为分隔符.存储空间开销应该可以忽略不计.

编辑:此方法称为物化路径

最后,这里是NOSQL数据库中分层数据的不同方法的比较.


MongoDB文档中有一篇关于存储树的可能性的文章非常好:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有