Google App Engine中的最大实体大小

2 投票
2 回答
1192 浏览
提问于 2025-04-16 16:13

我正在开发一个投票应用,想要支持很多选民(比如说10万个)。我担心在实现这个功能时,会遇到实体大小的限制或者其他限制。下面是我实体关系中相关的部分:

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

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

当用户在编辑选举时,我会把选民的电子邮件地址放在一个叫做tmp_voters的字符串列表里。在选举开始前,我会为每个选民创建一个选民实体,每个选民实体都指向选举实体。

看起来如果选民数量很大,tmp_voters可能会导致选举实体超出限制。这样理解对吗?我该怎么解决这个问题?使用blob(大对象)会是个好办法吗?

如果有很多选民实体,每个选民实体都指向选举实体,这会不会导致选举实体变得太大?也就是说,增加一个指向选举实体的引用会增加选举实体的大小吗?

还有其他我需要担心的限制吗?(除了配额之外)

2 个回答

0

看起来更好的设计应该是让每个选民(Voter)里面包含一个(可能很小的)他们参与的选举(Elections)列表,而不是反过来。这样,选举对象就只是关于选举的基本信息,而不是实际的选民名单。

当有人来投票时,你只需要调出他们的选民信息,确认他们有资格在这个选举中投票,然后保存他们的投票就可以了。

5

在一个实体中添加对另一个实体的引用,实际上对被引用的实体没有任何影响,唯一的变化就是自动生成的反向查询会多返回一个结果。

我不太明白tmp_voters的用途,但如果那个ListProperty变得太大,你会遇到一些问题。不过,问题可能不是出在实体的大小上;因为一个ListProperty最多只能有大约5000个条目,而你不会用1MB的空间来存放5000个电子邮件地址。

撰写回答