我总是在使用Google App Engine时遇到这个问题:我应该重复存储在其他实体中的数据还是应该建立关联?我应该分析什么才能做出这个决定?
我不会在搜索中使用这些信息,因此不是“GAE加入问题”,这是一个问题。
现在,我有类似这样坚固的例子:
public class GameResult
{
private int points;
private int duration;
...
}
public class Player
{
private string name;
private GameResult lastGameResult;
List<int> lastGamesPoints;
}
不知怎的,我需要知道过去5场比赛的标点符号,这是我需要的唯一信息,也就是说,我不需要了解过去游戏的GameResult的其他内容。我可以拥有这个整体列表,或者我可以拥有一个OneToMany GameResults协会。
答案 0 :(得分:0)
这实际上取决于您的实际使用情况和瓶颈。 如果您不需要修改这些数据,将它们复制到不同的实体将是一个好主意。特别是当您需要获取这些“最后五个结果”(使用order_by的查询)时。如果使用一对多关系模型,则意味着您需要花费一些CPU小时来首先对其进行索引。然后,您需要在查询这些结果时支付额外的CPU小时。我不认为这是个好主意。另一种方法是使用ListProperty来存储最后五个GameResult实体。这意味着您可以使用其密钥检索这些实体,这将比查询更快。
有关更多信息,请阅读一些很棒的帖子! Relational vs Non-Relational Data Modeling - what's the difference &安培; How to think in data stores instead of databases?