GAE ndb设计,性能和重复属性的使用

时间:2013-03-13 04:30:52

标签: python-2.7 google-app-engine google-cloud-datastore app-engine-ndb

假设我有一个图片库,一张图片可能有100k +粉丝。哪种ndb设计更有效?

class picture(ndb.model):
    fanIds = ndb.StringProperty(repeated=True)
    ... [other picture properties]

class picture(ndb.model):
    ... [other picture properties]

class fan(ndb.model):
    pictureId = StringProperty()
    fanId = StringProperty()

对于可以添加到ndb重复属性的项目数量是否有任何限制,并且在重复属性中存储大量项目是否有任何性能损失?如果使用重复属性效率较低,它们的用途是什么?

2 个答案:

答案 0 :(得分:32)

如果值超过100-1000,请勿使用重复属性。 (1000可能已经推动了它。)它们不是为这种用途而设计的。

答案 1 :(得分:5)

一般来说v1会便宜得多。

就读/写成本而言,您为每个实体提取/写入付费,因此您希望减少实体数量。版本1会更便宜。如果每次获取图片时都获取每个粉丝,那么便宜得多。

但是每个实体限制为1MB。如果您有100k +粉丝,则可以根据粉丝的大小达到该限制。这不算你的其他图片数据,所以你可以吹掉1MB的限制。您将不得不添加一些更复杂的代码来处理溢出情况。

大型实体的获取时间比小型实体要长。如果你要一直拿到所有的粉丝,v1会更好。如果你只想在任何一点获取5个粉丝,那么v2可能会更快(只有可能)。另一方面,如果你试图拉出100k风扇实体......这将永远消失。

相关问题