今天小编说一下如何在Rails中,将大段文本内容以压缩格式存在数据库。这也是从公司的一个项目中获得的灵感。
原始需求
手头有一个结构简单的文本库,可以看做是key=>value。约180万条数据,2.8G(确实不算大,见笑了)。
实施过程
整个实施过程做到了无缝转换,不需要停服务。
第一步:将文本字段类型由TEXT修改为BLOB;新增一个is_gzip字段用于标识是否经过压缩,默认为0。
* 需要注意,BLOB和TEXT最长支持65535字节。
第二步,修改Rails相应的Model。代码示例(压缩content字段):
class TextData < ActiveRecord::Model def content if self.is_gzip Zlib::Inflate.inflate(super) else super end end def content=(info_content) super Zlib::Deflate.deflate(info_content, 9) self.is_gzip = true end end
再一次感叹super的便捷。修改代码后,需要重新部署一下Rails应用。
第三步,创建一个rake任务,用来批量做转换。关键部位只消这么做:
text_data.content = text_data.content text_data.save
第四步,在做过修改的表上做一次optimize table,以释放那些不需要的空间。
效果观察
很多信息
评论加载中...
|
Copyright@ 2011-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号 google网站地图 百度网站地图 网站地图
公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563
法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明