代码之家  ›  专栏  ›  技术社区  ›  Blixt

nosql数据库中的树结构

  •  12
  • Blixt  · 技术社区  · 14 年前

    我正在为googleappengine开发一个应用程序,它使用BigTable作为数据存储。

    http://story.multifarce.com/

    这个想法是任何人都可以写一个段落,然后需要另外两个人验证。一个故事也可以在任何段落上分支,这样故事的另一个版本就可以在另一个方向上继续。

    想象一下下面的树结构:

    每个数字都是一个段落。我想能够选择每个独特的故事线的所有段落。基本上,这些独特的故事情节是(2,7,2)(2, 7, 6, 5); (2、7、6、11)和(2、5、9、4)。忽略节点“2”出现两次,我只是从Wikipedia获取了一个树结构图。

    我还绘制了一张拟议解决方案的示意图: https://docs.google.com/drawings/edit?id=1fdUISIjGVBvIKMSCjtE4xFNZxiE08AoqvJSLQbxN6pc&hl=en

    我怎样才能建立一个既能提高写作效率又能提高阅读效率的结构呢?

    2 回复  |  直到 8 年前
        1
  •  16
  •   Nick Johnson    14 年前

    有许多众所周知的方法来表示数据库中的树;它们各有利弊。以下是最常见的:

    物化路径易于实现,更新成本低,允许查询任意子树,但会增加深层树的开销。

    嵌套集更难实现,每次插入时平均需要更新一半的节点。它们允许您查询任意子树,而无需增加键长度问题。

    不过,在您的具体案例中,似乎您实际上根本不需要树结构:每个故事,尽管可能是一个原创的分支,却独立存在。我建议使用一个“Story”模型,其中包含段落的键列表(例如,在Python中是db.ListProperty(db.Key))。要呈现一个故事,您先获取故事,然后对所有段落进行批量获取。要分支一个故事,只需复制故事条目-保留对段落的引用不变。

        2
  •  0
  •   Keyur    14 年前