gpt4 book ai didi

google-app-engine - Google 数据存储 - Blob 或文本

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:03 24 4
gpt4 key购买 nike

TextBlob 数据类型是在 Google Datastore 中保存大字符串的两种可能方式。

从存储消耗的角度来看,建议使用两者中的哪一个?从 protobuf 序列化和反序列化的角度来看同样的问题。

最佳答案

两者之间没有显着的性能差异 - 只需使用最适合您的数据的那个。 BlobProperty 应用于存储二进制数据(例如,str 对象),而 TextProperty 应用于存储任何文本数据(例如,unicodestr 对象)。请注意,如果您将 str 存储在 TextProperty 中,它必须仅包含 ASCII 字节(小于十六进制 80 或十进制 128)(与 BlobProperty 不同).

如您在 source 中所见,这两个属性都派生自 UnindexedProperty .

这是一个示例应用程序,它演示了这些 ASCII 或 UTF-8 字符串的存储开销没有区别:

import struct

from google.appengine.ext import db, webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class TestB(db.Model):
v = db.BlobProperty(required=False)

class TestT(db.Model):
v = db.TextProperty(required=False)

class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'

# try simple ASCII data and a bytestring with non-ASCII bytes
ascii_str = ''.join([struct.pack('>B', i) for i in xrange(128)])
arbitrary_str = ''.join([struct.pack('>2B', 0xC2, 0x80+i) for i in xrange(64)])
u = unicode(arbitrary_str, 'utf-8')

t = [TestT(v=ascii_str), TestT(v=ascii_str*1000), TestT(v=u*1000)]
b = [TestB(v=ascii_str), TestB(v=ascii_str*1000), TestB(v=arbitrary_str*1000)]

# demonstrate error cases
try:
err = TestT(v=arbitrary_str)
assert False, "should have caused an error: can't store non-ascii bytes in a Text"
except UnicodeDecodeError:
pass
try:
err = TestB(v=u)
assert False, "should have caused an error: can't store unicode in a Blob"
except db.BadValueError:
pass

# determine the serialized size of each model (note: no keys assigned)
fEncodedSz = lambda o : len(db.model_to_protobuf(o).Encode())
sz_t = tuple([fEncodedSz(x) for x in t])
sz_b = tuple([fEncodedSz(x) for x in b])

# output the results
self.response.out.write("text: 1=>%dB 2=>%dB 3=>%dB\n" % sz_t)
self.response.out.write("blob: 1=>%dB 2=>%dB 3=>%dB\n" % sz_b)

application = webapp.WSGIApplication([('/', MainPage)])
def main(): run_wsgi_app(application)
if __name__ == '__main__': main()

这是输出:

text:   1=>172B  2=>128047B  3=>128047B
blob: 1=>172B 2=>128047B 3=>128047B

关于google-app-engine - Google 数据存储 - Blob 或文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com