gpt4 book ai didi

google-app-engine - Google App Engine 中 PolyModel 相对于模型的成本

转载 作者:行者123 更新时间:2023-12-01 15:08:21 25 4
gpt4 key购买 nike

我想知道在 Google App Engine 中使用 PolyModels 而不是 Models 在索引等方面的成本是多少。使用 PolyModels 而不是 Models 是否有基本成本,即使它从未被子类化?

最佳答案

PolyModel 使用“类”列表属性来存储 PolyModel 实例"is"的所有类。因此,如果您有一个 PolyModel Foo 和一个名为 Bar 的子类,则 Bar 的任何实例都将在其“类”属性中包含 [u'Foo', u'Bar']。 Bar 的实例实际上作为 Foo 的实例存储在数据存储中,在“类”属性中具有 Bar 模型名称。

“类”属性需要被索引,因此每次写入 PolyModel 子类都会导致对列表中每个类名的“类”索引进行额外的两次写入(一次用于降序,一次用于升序),因此如果模型的“类”属性包含 [u'Foo', u'Bar'] 写入该模型需要 4 次额外的索引写入。

当您在数据存储中查询 Foo 的实例时,数据存储可以查看每个以 Foo 作为父模型的模型,而不必过滤“类”属性(我不确定它是否过滤类,但我怀疑它没有)。

当您在数据存储中查询 Bar 的实例时,它实际上会查询 Foo 的实例,但会在“类”属性上应用过滤器以将结果过滤为 Bar 类型的模型。如果您没有应用其他过滤器和排序顺序,您可能不会在复合索引中注意到这一点,但如果您应用过滤器和排序,数据存储可能需要您的复合索引包含“类”属性,这可能需要您有更多的复合索引并写入更多复合索引。

我的一个应用程序在 PolyModel 上使用多级继承,几乎每个查询都在“创建的”DateTimeProperty 上排序。这些查询中的每一个都需要一个包含“类”的复合索引。在我的例子中,额外的索引写入是完全值得的,因为 PolyModel 允许我以一种很好的方式对数据建模。

2012 年 2 月 7 日更新以包含来自@Nick 的信息。

关于google-app-engine - Google App Engine 中 PolyModel 相对于模型的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8186751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com