go-common/app/job/main/history/dao/hbase.go
2019-04-22 18:49:16 +08:00

55 lines
1.2 KiB
Go

package dao
import (
"context"
"crypto/md5"
"encoding/binary"
"encoding/json"
"fmt"
"strconv"
"time"
"go-common/app/interface/main/history/model"
"go-common/library/log"
)
var (
tableInfo = "ugc:history"
family = "info"
)
// hashRowKey create rowkey(md5(mid)[:2]+mid) for histroy by mid .
func hashRowKey(mid int64) string {
var bs = make([]byte, 8)
binary.LittleEndian.PutUint64(bs, uint64(mid))
rk := md5.Sum(bs)
return fmt.Sprintf("%x%d", rk[:2], mid)
}
func (d *Dao) column(aid int64, typ int8) string {
if typ < model.TypeArticle {
return strconv.FormatInt(aid, 10)
}
return fmt.Sprintf("%d_%d", aid, typ)
}
// Add add history list.
func (d *Dao) Add(ctx context.Context, h *model.History) error {
valueByte, err := json.Marshal(h)
if err != nil {
log.Error("json.Marshal(%v) error(%v)", h, err)
return err
}
fValues := make(map[string][]byte)
column := d.column(h.Aid, h.TP)
fValues[column] = valueByte
key := hashRowKey(h.Mid)
values := map[string]map[string][]byte{family: fValues}
ctx, cancel := context.WithTimeout(ctx, time.Duration(d.conf.Info.WriteTimeout))
defer cancel()
if _, err = d.info.PutStr(ctx, tableInfo, key, values); err != nil {
log.Error("info.PutStr error(%v)", err)
}
return nil
}