密钥属性中的应用引擎 NDB 密钥是否计入 1MB 的存储空间限制



我正在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 . 实际使用的空间取决于内部编码,但这非常接近。

如果原始值

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

最新更新