12

假设我有一个图片库,一张图片可能有 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 重复属性的项目数量是否有任何限制,并且在重复属性中存储大量项目是否会影响性能?如果使用重复属性的效率较低,那么它们的预期用途是什么?

4

2 回答 2

33

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

于 2013-03-14T19:26:03.933 回答
5

通常 v1 会便宜得多。

在读/写成本方面,您为每个实体的获取/写入付费,因此您希望减少实体的数量。版本 1 会更便宜。如果每次取图片都取走所有粉丝,价格会便宜很多。

但是,每个实体限制为 1MB。如果您有 10 万以上的粉丝,您可以根据 fanId 的大小达到该限制。这还不包括您的其他图片数据,因此您可能会突破 1MB 的限制。您必须添加一些更复杂的代码来处理溢出情况。

大实体比小实体需要更长的时间来获取。如果您要始终同时吸引所有粉丝,v1 会更好。如果您只想在任何时候获取 5 个粉丝,v2 可能会更快(仅可能)。另一方面,如果您尝试拉出 10 万个粉丝实体……那将永远持续下去。

于 2013-03-13T15:35:06.217 回答