我需要存储在谷歌的AppEngine大型和动态无向图,什么是做到这一点的最好方法是什么? 该图表示必须能够支持迅速拉出一组顶点(渲染页面上),并从一个特定的顶点的所有环节,并寻路横跨图(尽管不是真正需要的最佳路径,只是一个相当好一个)

我关于这个问题的想法: 最明显的方法是有一个顶点模型,并引用两个顶点的边缘模型,但是这听起来像它会最终使用非常多的每个操作查询的,我不知道是否有更好的方法(也许建立的链接信息到每个顶点以某种方式)

有帮助吗?

解决方案

下面是最简单的方法:

class Vertex(db.Model):
  outedges = db.ListProperty(db.Key)
  # Other information about the vertex here

现在,你可以探索没有任何疑问的图形在所有 - 只是调用db.get方法上的1个或多个键检索相关顶点:

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

# Get all referenced vertices
vertices = db.get(vertex1.outedges)

其他提示

根据您可能希望只使用列表,而不是创建一个新的一堆实体的顶点/链接的数量。检查中,谷歌IO 2009年这一视频的后半部分描述的朋友图问题:的http:// www.youtube.com/watch?v=AgaL6NGpkB8

如果您认为顶点的数量足够大,你可以只创建一个表示连接列表的顶点模式。

考虑到你正在使用的谷歌应用程序引擎这将是最好的,如果你存储在单独的表中的信息:

一个用于顶点,一个用于从一个顶点的链接(如你已经说过)和一个附加一个,其中的路径已经预先计算。

GAE效果最好,如果你存储在非规范化的信息,因此您不必做任何计算。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top