我正在Google App Engine中创建达到1MB大小限制的NDB模型实例。 它与长度为 10-20k 的重复StringProperty
有关。
下面是一个示例:
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键属性和其他模型吗? 密钥是否计入 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键属性的相对大小是多少?
,属性的键值会占用实体存储空间。键使用的空间量与字符串等效项成正比,例如:ParentKind:name/ChildKind:other_id
. 实际使用的空间取决于内部编码,但这非常接近。
很小,则可以正确地怀疑键可能占用与原始值一样多的空间。 如果您处于绑定状态,并且确定数据大小不会进一步增长,则可能值得一试,以节省少量费用。