首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储大量文本的空间高效Django模型类型

存储大量文本的空间高效Django模型类型
EN

Stack Overflow用户
提问于 2016-02-02 09:30:45
回答 1查看 1.9K关注 0票数 1

目前,我正在尝试使用djangoappengine将现有的djangoappengine应用程序从webapp2移植到django。

使用Django存储数据的内存空间节省方法是否等效?因为对于免费用户来说,GAE中的存储量是有限制的。

webapp2模型码

代码语言:javascript
复制
class TagTrend_refine(ndb.Model):
    tag = ndb.StringProperty()
    trendData = ndb.BlobProperty(compressed=True)

我知道TextField可以存储大量的文本,但是它可以使用较少的内存来存储吗?是否有可能使用BlobField?

存储trendData数据的一个示例(多达24783个字符)是

代码语言:javascript
复制
{"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},...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-03 06:04:44

Django本身并没有一种存储压缩数据的方法,但是在将数据保存到数据库之前,可以使用zlib模块来压缩数据。

以下是Django中这样一个字段的示例实现:

代码语言:javascript
复制
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相比,该字段有一个额外的参数。

代码语言:javascript
复制
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字节。

请注意,使用这样一个字段的限制是存储数据被压缩。这意味着您的数据库查询将使用压缩版本进行搜索/筛选。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35149540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档