Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python KeyProperty中的应用引擎NDB密钥是否计入1MB存储限制?_Python_Google App Engine_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Python KeyProperty中的应用引擎NDB密钥是否计入1MB存储限制?

Python KeyProperty中的应用引擎NDB密钥是否计入1MB存储限制?,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我在Google App Engine中创建的NDB模型实例达到了1MB的大小限制。它与长度为10-20k的重复StringProperty有关 下面是一个例子: class MyModel(ndb.Model): items = ndb.StringProperty(repeated=True) instance = MyModel() instance.items = [] For item in largeDataset: instance.items.append(it

我在Google App Engine中创建的NDB模型实例达到了1MB的大小限制。它与长度为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 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个字符),但数量是可变的(20000+),我更喜欢一种不会达到实例大小限制的方法


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

是的,属性的键值消耗实体存储空间。键使用的空间量与等效字符串成比例,例如:
ParentKind:name/ChildKind:other\u id
。实际使用的空间取决于内部编码,但这非常接近


如果原始值很小,您就有理由怀疑这些键占用的空间可能与原始值一样大。如果您处于绑定状态,并且确信数据大小不会进一步增长,则可能值得一试,以节省少量成本。

既然您提供了代码,为什么不直接运行它,看看它是否有效?另外,您的项目是否在
put()
之后更新?您确定谷歌云存储不会更好地满足您的需求吗?如果没有-也许你可以检查你的数据是否超过了限制,如果超过了限制-做一些类似于链表的事情,在链表中你有一个对下一个实体的引用,而其余的数据不适合你以前的实体,通过这种方式,您可以在一个循环中读取所有数据,并且不受1mb数据大小的限制,如果需要,还可以存储几十MB的数据(不确定这有多高效)。因为项目列表是可变的,而我现在没有一个列表可以代表模型测试的最大值。这段代码大大简化了我的工作,在我开始使用重复的KeyProperty之前,我想先介绍一下SO的经验。如果您不需要使用它们进行查询,请使用压缩的本地结构化属性。我可以尝试压缩的本地结构化属性。我预见到的唯一问题是10分钟的执行限制,而且gzip压缩在许多项目上增加的CPU负载可能会达到限制,但我可以解决这个问题。如果我使用压缩,我会更新这个问题。谢谢-大概的KeyProperty大小是我想要的。我查了一下文件,没找到。