我正在尝试使用Google App Engine,但有一个问题。
为了简单起见,假设我的应用程序对计算机网络(一个具有10,000个节点的相当大的公司网络)进行建模。我正在尝试按如下方式对Node类进行建模:
class Node(db.Model):
name = db.StringProperty()
neighbors = db.SelfReferenceProperty()
假设有一分钟,我无法使用ListProperty()。根据迄今为止的实验,我只能将单个实体分配给“邻居”,并且无法使用“虚拟”集合(node_set)访问“节点”邻居列表。
所以...我的问题是:
SelfReferenceProperty是否将您限制为可以引用的单个实体?
如果我改用ListProperty,我相信我只能使用5,000个密钥,而我需要超过5000个密钥。
更新资料
就像我以前一样,我全都穿着短裤,我忘记了* ReferenceReleationship是“倒退的” ---事物的“清单”指向关系的一侧。 SelfReferenceProperty按照我的想法工作。我的错。我仍然需要处理关系中很大的“很多”方面-我认为ListProperty不会解决问题,但我会发布我发现的内容。
谢谢,
约翰
最佳答案
关于1,是的(如果我正确理解了您的要求):对于模型中的每个属性,模型的每个实例(又称为“实体”)对该属性都有一个值。所以例如IntegerProperty
具有给定实体的一个整数值,SelfReferenceProperty
具有给定实体的一个值(内部为字符串),依此类推。当然,模块的所有实例都不是一个单一的值,但是我不相信那是您的意思。
关于2,限制为5000(哇,单个节点图的邻居很多,总共只有10000个节点!)我相信您所指的是实体的索引-本文将更好地说明该限制。
一种可能的解决方法是在节点上完全不具有neighbors
属性,而是使用一个单独的Connection
模型来表示从一个节点到另一个节点的连接(在Connection中具有ReferenceProperty
属性,每个属性都引用一个节点)。您将需要在Connection中添加一些额外的内容(例如,受影响节点的传入和传出连接的渐进计数),以便能够获取成千上万个(当然,在多个查询中,一次要1000个)局限性)。
关于python - SelfReferenceProperty与ListProperty Google App Engine,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2495709/