根据字段类型TextProperty
的云数据存储文档,不应该对大小有任何限制,但在我的情况下,它给出了以下错误,字符串大小等于
属性“{my_field_name}”的值超过1048487字节
以下是我的实体类
class History(ndb.Model):
user_mail = ndb.StringProperty()
json_string = ndb.TextProperty(indexed=False)
updated_date = ndb.DateTimeProperty()
这是我试图存储实体的功能
def store_user_mail(user_email, json_object):
# string size for which this is creating problem is around 1.56Mb
print(sys.getsizeof(json.dumps(json_object)))
user_mail_obj = History()
user_mail_obj.user_mail = user_email
user_mail_obj.json_string = json.dumps(json_object)
user_mail_obj.updated_date = datetime.datetime.utcnow()
user_mail_obj.put()
此外,我在存储之前尝试过压缩json字符串,但这会给我们带来问题,因为我们希望将其存储为text属性而不是二进制数据。
同样重要的是,我的json_string
字段为 TextProperty 类型,无论字符串大小如何,都应该存储它而不会出现任何问题。已经花了很多时间搞清楚解决方案。我在这里做错了什么,或者是 NDB 或数据存储区的错误,如果是这样的话,什么是一个好的解决方案?
答案 0 :(得分:1)
实体的大小限制为1MB。如果您要在实体/属性中存储的内容可能大于那个,那么您需要使用CloudStorage。我建议将该文本存储为云存储中的文件,并在对象的属性中保留链接。它可能看起来像这样:
class History(ndb.Model):
user_mail = ndb.StringProperty()
url = ndb.StringProperty() #https://storage.googleapis.com/{app_id}/{file_name}
updated_date = ndb.DateTimeProperty()
然后,当您需要该文本时,您只需阅读该网址中存储的文件。