2010-02-28 57 views
0

我对数据库对象设计非常陌生,所以请原谅我的问题中的任何古怪。基本上,我使用Google AppEngine(Python)并构造一个对象来跟踪用户信息。其中一项数据是40个成就得分。我是否在User对象中为此列出了整数列表?或者我用我的用户ID,成就指数(0-39)和得分制作一个单独的实体,然后做一个查询来抓取这40个项目,每次我总想获取用户数据?简单的值列表GAE python数据库对象设计

后一种方法似乎更倾向于我的面向对象,当然,如果我将它扩展到40个以上成就的分数以上,那当然会更好。但是,考虑到我可能无法扩展它,我是否应该考虑在我的用户数据中做一个简单的40个整数列表?然后,我会放弃做一个查询,得到排序的成就列表,从每一个阅读得分只是为了处理一个响应等。

正在做这种后一种方法就是这样一个普遍的做法,挥手甚至不值得在思考方面打击睫毛可能会更昂贵或复杂的处理明智?

回答

2

我喜欢保持的40个int是清单的简单的想法,但你不能强迫它进到App Engine的现有User类,其布局是由GAE的API来确定(但不包括那些40 int S)。因此,该列表将不可避免地需要生活在单独的实体中(即,单独模型的每个实例)。

+0

我没有意识到有一个用户类。我的意思是我有我自己的MyUser实体,我可以声明一个40个整数的列表。我一直在寻找的是,使用40个整数通常是一个非常无关紧要的优化,而不是创建一个单独的实体类型来包含该数据,然后必须在每次想要获取特定用户的信息时查询这些数据。 感谢您的回复。我会跟随这种回应,想知道在什么时候最好分解成一个单独的实体,或者在我的MyUser类中保留多个“40件事情”列表以避免查询。 – Joey 2010-03-01 06:09:16

+0

@Joey,查询的成本是一个常数加上一个与实体大小成比例的术语;因此,存储(并且每次都不可避免地提取)您不总需要的数据会导致性能成本(较大的实体)分裂,以及增加(较少的查询),所以“在什么时间点”一个或另一个设计更好取决于在主要实体的每次提取时将或不需要这样的额外数据的可能性。 – 2010-03-01 15:25:51