Database design 在可伸缩数据库中实现树结构的好方法?

Database design 在可伸缩数据库中实现树结构的好方法?,database-design,tree,nosql,Database Design,Tree,Nosql,我需要一个数据库引擎。我认为它非常接近于一个简单的文件系统。我需要做以下工作: 列出“文件夹”中的项目 扩展数据库,在多台机器上实现可靠性和速度 添加/删除“文件夹”和“对象” 也许符号链接可以避免重复 每个“对象”都是一组大小不超过kB的数据(key:value)(猜测) 我看过沙发床,但它们似乎不适合我的需要。Couchbase不支持第一个需求,Neo4j似乎太先进了。(为什么要实现一个永远不会被使用的功能?) 我不需要数据的任何权限或安全性。只是冗余和速度。读操作将比写操作多得多 实现

我需要一个数据库引擎。我认为它非常接近于一个简单的文件系统。我需要做以下工作:

  • 列出“文件夹”中的项目
  • 扩展数据库,在多台机器上实现可靠性和速度
  • 添加/删除“文件夹”和“对象”
  • 也许符号链接可以避免重复
每个“对象”都是一组大小不超过kB的数据(key:value)(猜测)

我看过沙发床,但它们似乎不适合我的需要。Couchbase不支持第一个需求,Neo4j似乎太先进了。(为什么要实现一个永远不会被使用的功能?)

我不需要数据的任何权限或安全性。只是冗余和速度。读操作将比写操作多得多

实现这一点的最佳方式是什么?磁盘上的文件夹是最好的方式吗?如何使其跨越多个冗余服务器

编辑:
原始问题:
我们有大量的对象,最多有50个标签。平均猜10个标签。 客户端将向服务器发送标签列表。 服务器应返回包含用户发送的所有(或几乎所有)标记的所有对象的列表

我目前的做法:
1.以某种程度上的外观顺序获取所有可能标记的列表(首先使用最多的标记)。让我们称之为标记列表

2.按
标记列表对客户端列表进行排序

3.使用以下算法:

algorithm( startFolder ) {
 for each object in startFolder {
      stack.push (object);
 }
 for each folder in startFolder where (folder.name is in listSentByClient) {
      algorithm( folder );
 }
}
四,<代码>堆栈
现在包含包含客户端发送的所有标记的所有对象。 5.将堆栈返回到客户端

添加新对象时:
1.按标记列表对标记进行排序。调用此
sortedlist

2.输入或创建文件夹,其中name==sortedlist中的第一个标记 3.删除
sortedlist中的第一个标签

4.重复步骤2和步骤3,直到没有留下标签
5.在当前位置创建对象


如果这种方法是错误的,或者你知道一种更好的方法,请告诉我。

你可以在Couchbase 2.0中做到这一点(不是1.8.x,没有一些非常有趣的键控结构,我实际上可以做到,但并不明显),因为2.0与弹性搜索集成,但它是在测试版之前。通过视图和查询也可以做到这一点


在Neo4J中,可以通过将每个标记和对象设置为节点并创建它们之间的关系(对象和标记之间的单一双向关系)来实现这一点。这是一个相当简单的查询,可以获取距离标记节点1级的所有对象节点。虽然它有点复杂,但您也可以根据对象与一组标记节点的关系数进行查询

什么是重要的访问模式?访问一个文件夹,您现在的id是?根据从根开始的一系列成功文件夹查找叶文件夹。。。还有别的吗?@Jenschauder我想我已经写了你要的东西了。怎么使用弹性搜索呢?如果这是最好的选择,你能举一个Neo4J的例子吗?任何适合我需要的都可以。不过,开源是首选。