我在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的相对大小是多少?
答案 0 :(得分:2)
是,属性的键值会占用实体存储空间。密钥使用的空间量与字符串等效值成比例,例如:ParentKind:name/ChildKind:other_id
。使用的实际空间取决于内部编码,但这非常接近。
如果原始值很小,您可能会怀疑这些键可能占用的空间与原始值一样多。如果您处于绑定状态并且确定数据大小不会进一步增长,则可能值得一试,只需节省少量资金。