在Google appengine数据存储区中存储有向图

Mar*_*tin 9 google-app-engine database-design directed-graph path-finding

我需要在google appengine中存储一个大而动态的无向图,这是最好的方法吗?图形表示必须能够支持快速拉出一组顶点(用于在页面上渲染)和来自特定顶点的所有链接,以及跨图形的路径寻找(尽管最佳路径并不是真正需要的,只是一个公平的好的一个)

我对这个主题的看法:最明显的方法是有一个顶点模型和一个引用两个顶点的边缘模型,但听起来它最终会为每个操作使用大量的查询,我想知道是否有一种更好的方法(可能以某种方式将链接信息构建到每个顶点)

Nic*_*son 7

这是最简单的方法:

class Vertex(db.Model):
  outedges = db.ListProperty(db.Key)
  # Other information about the vertex here
Run Code Online (Sandbox Code Playgroud)

现在你可以在没有任何查询的情况下探索图形 - 只需在一个或多个键上调用db.get来检索相关的顶点:

# Get the first referenced vertex
vertex2 = db.get(vertex1.outedges[0])

# Get all referenced vertices
vertices = db.get(vertex1.outedges)
Run Code Online (Sandbox Code Playgroud)