我正在尝试使用Google App Engine并提出问题。
为了简单起见,假设我的应用程序正在建模一个计算机网络(一个拥有10,000个节点的相当大的企业网络)。我正在尝试按如下方式对我的Node类进行建模:
class Node(db.Model):
name = db.StringProperty()
neighbors = db.SelfReferenceProperty()
让我们假设一分钟,我不能使用ListProperty()。根据我迄今为止的实验,我只能将一个实体分配给“邻居” - 我不能使用“虚拟”集合(node_set)来访问Node邻居列表。
所以...我的问题是:
更新
所有人都像我一样裹着我的短裤,我忘记了* ReferenceReleationship是“倒退” - 事物的“列表”指向关系的一方。 SelfReferenceProperty正如我所想的那样工作。我的错。我仍然需要处理关系的大“多”方面 - 我不认为ListProperty会做这个伎俩,但我会发布我发现的内容。
谢谢, 约翰
答案 0 :(得分:1)
Re 1,yes(如果我理解你的要求):对于模型中的每个属性,模型的每个实例(AKA“entity”)都具有该属性的一个值。所以例如对于给定实体,IntegerProperty
具有一个整数值,SelfReferenceProperty
具有给定实体的一个值(内部为键字符串),并且等等。当然,并非所有模块实例的单值,但我不相信这就是你的意思。
Re 2,5000限制(哇,这是单个节点图的邻居很多,只有10000个节点!)我相信你指的是实体的索引 - 本文更好地解释了限制。
一种可能的解决方法是在节点上根本没有neighbors
属性,而是一个单独的Connection
模型来表示从一个节点到另一个节点的连接(具有ReferenceProperty
属性,在Connection中,每个引用一个Node)。在连接中你需要一些额外的东西(例如,受影响节点的传入和传出连接的渐进计数),当然能够获取数千个它们(在多个查询中,给定1000个一次)限制)。