模拟我的课程的最佳方式?

时间:2012-02-03 15:42:41

标签: google-app-engine

什么会更有效率?

有一个具有一个属性的大型过滤

有一大类,而另一种类型具有带键的属性列表,并使用第二种类型来恢复属于第一类的实体。每个列表Aprox 6k项目。

选项1 _ __ _ __

class customer()
  propertyinteger
  propertystriing
  ...
  propertyintegerID = use to be filtered and indexed
    thousand of costumers

选项2 _ __ _ ____

class customer()
  propertyinteger
  propertystriing

class CustomerGroup()
    propertystring
    propettycustomerList (repeated=True) (save a list with __key__ of customer class)

我使用CustomerGroup ListProperty来获取我感兴趣的客户。该列表将有6k aprox。

感谢。

1 个答案:

答案 0 :(得分:1)

选项1可能没问题。如果我理解正确,每个客户都可以属于一个组,一个客户一次只能属于一个组,并且您希望能够查询属于组的所有客户。您的组查询只是Customer类型的单个属性上的相等过滤器。

对于您对一致性保证和查询的需求还有其他注意事项。假设两个客户实体必须位于不同的实体组中,则组ID属性的索引将更新为最终一致性,因此在更新后不久,新的客户或组ID的更改可能不会作为组查询的结果出现。如果不是这样,选项2或同一实体组中的一组单独的客户到组配对实体将使组查询(具有祖先过滤器)与更新强烈一致。通过将所有客户实体放在同一组中,可以使选项1具有很强的一致性,但这有可能存在缺点,具体取决于您的应用程序的需求。