想知道在创建实体时,在Google Cloud Datastore中存储和查询长值的最佳类型是什么。
如果我尝试将long值存储为整数,则会将其存储,但在执行查询时无法返回。查询失败是有道理的。如果我将long int值存储为字符串或浮点数,则存储和查询工作正常。
想要了解存储我想要的价值的最佳做法是什么"索引属性"。
答案 0 :(得分:2)
您可以通过以下链接找到数据存储区限制。 https://cloud.google.com/datastore/docs/concepts/limits
如果您熟悉数据存储区索引的这一概念,它对您也很有用。 https://cloud.google.com/appengine/docs/standard/python/datastore/indexes
并链接到最佳实践。 https://cloud.google.com/datastore/docs/best-practices
关于您的方法,将长整数存储为字符串并仍然能够索引此类属性。对于以1500字节为单位的UTF-8大小的索引字符串存在限制。 一般来说,这是你可以存储它的唯一方法,但我可以提出其他方法来增加这个限制。
但是,目前无论如何,这是我能看到的唯一方式,如你所描述的那样,以字符串格式。
答案 1 :(得分:1)
我认为这是您的确切问题:
google.api_core.exceptions.InvalidArgument: 400 The value of property "{myVar}" is longer than 1500 bytes.
即使您已明确地将字段设置为不被索引,或者选择了没有索引选项的“文本”类型,插入/插入内容也会对1500字节以上的对象失败。
这是解决该问题的方法:
client = datastore.Client()
kind = 'myKind'
uniqueKey = f'{howeverYouGenerateYourKeys}'
completeKey = client.key(kind, uniqueKey)
# incompleteKey = client.key(kind) # alternately, you could let Google generate the key id for you!
entity = datastore.Entity(key=completeKey, exclude_from_indexes=['reallyLongField'])
entity.update({
'firstName': x.firstName,
'lastName': x.lastName,
'favoriteDinosaur': x.rawr,
'reallyLongField': x.deeeetails
})
client.put(entity)
重要的是将exclude_from_indexes
添加到datastore.Entity(...)
。