0

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

  • 列出“文件夹”中的项目
  • 扩展数据库以在多台机器上实现可靠性和速度
  • 添加/删除“文件夹”和“对象”
  • 也许符号链接以避免重复

每个“对象”将是一组数据(键:值),最大大小为 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.在当前位置创建对象

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

4

1 回答 1

0

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

在 Neo4J 中,您可以通过使每个标签和对象成为一个节点并在它们之间创建关系(对象和标签之间的单一双向关系)来做到这一点。这是一个相当简单的查询,可以获取距离标签节点 1 级深的所有对象节点。尽管它更复杂一些,但您也可以根据与对象具有的一组标记节点的关系数进行查询。

于 2012-08-24T17:25:05.997 回答