2011-04-22 46 views
2

我正在参与GAE的投票应用程序,我希望能够支持非常多的选民(比如100,000)。我担心能够在不触及实体大小或任何其他限制的情况下执行此操作。这里是我的实体关系的相关部分:Google App Engine中的最大实体大小

class Election(db.Model): 
    tmp_voters = db.StringListProperty(default = "") 

class Voter(db.Model): 
    election = db.ReferenceProperty(Election, collection_name = "voters") 

当用户正在编辑的选举,我把选民的电子邮件地址列表中StringListProperty称为tmp_voters。在选举开始之前,我为每个选民创建一个选举实体,每个选民实体都有一个对选举实体的引用。

看来,对于大量选民来说,tmp_voters会导致选举实体超出限制。是对的吗?我如何解决这个问题?会使用blob是一个很好的解决方案?

将有大量的选民实体,其中每一个引用选举实体,导致选举实体过大?即,是否增加了对选举实体的引用来增加选举实体的规模?

任何其他的限制我应该关注与非常大量的选民? (配额除外)

+0

“我希望能够支持非常多的选民(比如10万)。” - 从什么时候开始100,000是很多很多的事情? – 2011-04-22 04:02:35

+0

@Jeff :好的。我可以理解单个实体的大小只有1GB的限制,但是100,000不是很多实体... – 2011-04-22 04:09:25

+0

@Mitch:这是一个错字。最大尺寸为1MB。 – 2011-04-22 04:13:38

回答

4

将引用添加到另一个实体中的实体对引用的实体没有任何影响,但自动生成的反向引用查询将返回一个更多结果。

目前还不清楚tmp_voters是干什么用的,但是,如果ListProperty变得太大,您将遇到问题,但可能与实体大小无关;一个ListProperty只能有5000个条目,并且你不打算使用1MB空间来保存5K个电子邮件地址。

+0

您是否建议使用blob而不是tmp_voters的ListProperty? – 2011-04-22 13:45:09

+0

我不确定'tmp_voters'在做什么或者你将如何访问它,所以很难说。 – geoffspear 2011-04-22 14:42:09

0

似乎更好的设计是让每个选民都包含一个他们参与的(可能很小的)选举列表,而不是其他方式。然后,选举对象只是关于选举的元数据,而不是实际的选民列表。

当有人到达你投票时,你只需拉起他们的选民条目,检查他们是否可以在选举中投票,并保存他们的投票。