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

时间:2012-08-24 10:36:15

标签: database-design tree nosql

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

  • 列出“文件夹”中的项目
  • 通过多台计算机扩展数据库的可靠性和速度
  • 添加/删除“文件夹”和“对象”
  • 可能是避免重复的符号链接

每个“对象”都是一组数据(密钥:值),最大为kB(猜测)。

我已经查看了couchbase和http://www.infoq.com/articles/graph-nosql-neo4j,但它们似乎不符合我的需求。 Couchbase不支持第一个要求,Neo4j似乎太先进了。 (为什么要实现一个永远不会被使用的功能?)

我不需要任何数据权限或安全性。只是冗余和速度。读取的次数会多于写入次数。

实现此目的的最佳方法是什么?磁盘上的文件夹是最好的方法吗?如何通过冗余跨越多个服务器?

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

到目前为止我的方法:
 1.按照外观的某种顺序获取所有可能标签的列表(最常用的是第一个)。我们称之为taglist  2.按taglist从客户排序列表  3.使用以下算法:

algorithm( startFolder ) {
 for each object in startFolder {
      stack.push (object);
 }
 for each folder in startFolder where (folder.name is in listSentByClient) {
      algorithm( folder );
 }
}

4。 stack现在包含所有包含客户端发送的所有标记的对象。  5.将堆栈返回给客户端

添加新对象时:
 1.按taglist对标签进行排序。请致电此sortedlist
 2.在sortedlist中输入或创建名称==第一个标记的文件夹  3.删除sortedlist中的第一个标签  4.重复步骤2和3,直到没有标签留下  5.在当前位置创建对象

如果这种方法错了或者你知道更好的方法 - 请告诉你。

1 个答案:

答案 0 :(得分:0)

你可以在Couchbase 2.0中做到这一点(不是1.8.x而没有一些非常有趣的键控结构,我实际上可以这样做,但并不明显),因为2.0与Elastic Search集成,但是它处于预测试状态。也可以使用视图和查询来执行此操作。

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