目前,我正在尝试使用djangoappengine将现有的djangoappengine应用程序从webapp2移植到django。
使用Django存储数据的内存空间节省方法是否等效?因为对于免费用户来说,GAE中的存储量是有限制的。
webapp2模型码
class TagTrend_refine(ndb.Model):
tag = ndb.StringProperty()
trendData = ndb.BlobProperty(compressed=True)我知道TextField可以存储大量的文本,但是它可以使用较少的内存来存储吗?是否有可能使用BlobField?
存储trendData数据的一个示例(多达24783个字符)是
{"2008": "{\"nodes\": [{\"group\": 0, \"name\": \"ef-code-first\", \"degree\": 6}, {\"group\": 1, \"name\": \"gridview\", \"degree\": 6}, {\"group\": 2, \"name\": \"mvvm\", \"degree\": 6}, {\"group\": 1, \"name\": \"webforms\", \"degree\": 6}, {\"group\": 2, \"name\": \"binding\", \"degree\": 6}, {\"group\": 3, \"name\": \"web-services\", \"degree\": 6}, {\"group\": 2, \"name\": \"datagrid\", \"degree\": 6},...发布于 2016-02-03 06:04:44
Django本身并没有一种存储压缩数据的方法,但是在将数据保存到数据库之前,可以使用zlib模块来压缩数据。
以下是Django中这样一个字段的示例实现:
class CompressedTextField(models.TextField):
def __init__(self, compress_level=6, *args, **kwargs):
self.compress_level = compress_level
super(CompressedTextField, self).__init__(*args, **kwargs)
def to_python(self, value):
value = super(CompressedTextField, self).to_python(value)
return zlib.compress(value.encode(), self.compress_level)
def get_prep_value(self, value):
value = super(CompressedTextField, self).get_prep_value(value)
return zlib.decompress(value).decode()与常规TextField相比,该字段有一个额外的参数。
class TagTrend(models.Model):
tag = models.CharField(max_length=1024)
# zlib offers compression levels 0-9
# 0 is no compression
# 9 is maximum compression
trendData = CompressedTextField(compress_level=9)例如,压缩时存储字符串'a' * 1024 (即1024字节)仅为17字节。
请注意,使用这样一个字段的限制是存储数据被压缩。这意味着您的数据库查询将使用压缩版本进行搜索/筛选。
https://stackoverflow.com/questions/35149540
复制相似问题