假设我有一个图片库,一张图片可能有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重复属性的项目数量是否有任何限制,并且在重复属性中存储大量项目是否有任何性能损失?如果使用重复属性效率较低,它们的用途是什么?
答案 0 :(得分:32)
如果值超过100-1000,请勿使用重复属性。 (1000可能已经推动了它。)它们不是为这种用途而设计的。
答案 1 :(得分:5)
一般来说v1会便宜得多。
就读/写成本而言,您为每个实体提取/写入付费,因此您希望减少实体数量。版本1会更便宜。如果每次获取图片时都获取每个粉丝,那么便宜得多。
但是每个实体限制为1MB。如果您有100k +粉丝,则可以根据粉丝的大小达到该限制。这不算你的其他图片数据,所以你可以吹掉1MB的限制。您将不得不添加一些更复杂的代码来处理溢出情况。
大型实体的获取时间比小型实体要长。如果你要一直拿到所有的粉丝,v1会更好。如果你只想在任何一点获取5个粉丝,那么v2可能会更快(只有可能)。另一方面,如果你试图拉出100k风扇实体......这将永远消失。