KeyProperty中的App Engine NDB密钥是否计入1MB存储限制?

时间:2015-01-29 18:10:44

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

我在Google App Engine中创建了达到1MB大小限制的NDB模型实例。它与重复的StringProperty有关,长度为10-20k。

以下是一个例子:

class MyModel(ndb.Model):
    items = ndb.StringProperty(repeated=True)

instance = MyModel()
instance.items = []
For item in largeDataset:
    instance.items.append(item)

instance.put()
# Instance is >1MB Error

我的问题是解决这个问题,我可以使用ndb keyproperties和其他模型吗?密钥是否计入1MB限制?

这将是:

class ItemModel(ndb.Model):
    item = ndb.StringProperty()

class MyModel(ndb.Model):
    items = ndb.KeyProperty(ItemModel, repeated=True)

instance = MyModel()
instance.items = []
For item in largeDataset:
    instance.items.append(
        ItemModel(item=item).put()
    )

instance.put()
# Same problems?

我还会得到相对相同的错误吗?项目字符串的长度不是很长(约60个字符),但数量是可变的(20,000+),我更喜欢一种不会达到实例大小限制的方法。

密钥是否计入1MB限制?如果是这样,NDB keyProperty的相对大小是多少?

1 个答案:

答案 0 :(得分:2)

是,属性的​​键值会占用实体存储空间。密钥使用的空间量与字符串等效值成比例,例如:ParentKind:name/ChildKind:other_id。使用的实际空间取决于内部编码,但这非常接近。

如果原始值很小,您可能会怀疑这些键可能占用的空间与原始值一样多。如果您处于绑定状态并且确定数据大小不会进一步增长,则可能值得一试,只需节省少量资金。