INDUSTRY INFORMATION

网络推广

当前位置:首页  »  网站代运营  »  网络推广  »  Golang开发:xorm+gzip实现mysql中字符串压缩存取

Golang开发:xorm+gzip实现mysql中字符串压缩存取

发布时间:2022-11-03 04:36 作者:空灵

Golang开发:xorm+gzip实现mysql中字符串压缩存取。

开发中,遇到mysql大的字符串存储需求,也不用于查询,只是存储一下

可以使用压缩算法来降低存储的使用,也能加速数据存取,毕竟mysql得存取成本还是挺高的

基于简单的方案:xorm+gzip压缩

xorm提供特定的接口Conversion,可以对实现该接口的数据类型存取时自动进行转换,还是挺方便的

type Conversion interface {
    FromDB([]byte) error
    ToDB() ([]byte, error)
}

因为数据存取的都是byte,所以在mysql中的数据类型需要对应的设置为blob类型。

实现

import (
	\"bytes\"
	\"compress/gzip\"
	\"encoding/json\"
	\"io\"
)

type ZipAlerts []*Alert

// FromDB implement xorm db interface
func (za *ZipAlerts) FromDB(bs []byte) error {
	if bs == nil {
		return nil
	}
	zr, err := gzip.NewReader(bytes.NewBuffer(bs))
	if err != nil {
		return err
	}
	var buf bytes.Buffer
	_, err = io.Copy(&buf, zr)
	if err != nil {
		return err
	}
	var znf ZipAlerts
	err = json.Unmarshal(buf.Bytes(), &znf)
	if err != nil {
		return err
	}
	*za = znf
	return nil
}

// ToDB implement xorm db interface
func (za *ZipAlerts) ToDB() ([]byte, error) {
	if za == nil {
		return nil, nil
	}
	data, err := json.Marshal(za)
	if err != nil {
		return nil, err
	}
	var buf bytes.Buffer
	zw := gzip.NewWriter(&buf)
	_, err = zw.Write(data)
	if err != nil {
		return nil, err
	}
	zw.Close()
	return buf.Bytes(), nil
}

推荐资讯
  • 选择正确的关键词定位
  • 1、关键词一定要考虑互斥性 所谓的关键词互斥性是指:两个产品设置的关键词之间没有任何联系.....
  • 2022-11-03
  • 企业网站如何设置关键词
  • 企业网站如何设置关键词?关键词是网站优化工作中的重中之重,后期的网站优化,都是围绕关键词.....
  • 2022-11-03