为了账号安全,请及时绑定邮箱和手机立即绑定

BoltDB 中的关键顺序

BoltDB 中的关键顺序

Go
阿波罗的战车 2021-12-07 18:30:39
boltdb 的键应该使用哪个字节序?我应该先获取机器的字节序并使用它吗?我需要正确排序键 - 就像一个字节序列,没有用于排序它们的特定逻辑。例如,这里应该使用哪个字节序(theKey是一个连续的id,就像 amongodb的一个):package mainimport (    "bytes"    "encoding/binary"    "fmt"    "log"    "time"    "github.com/boltdb/bolt")var (    Endian = binary.BigEndian // Which endian?)func main() {    db, err := bolt.Open("temp.db", 0600, nil)    if err != nil {        log.Fatal(err)    }    defer db.Close()    defer time.Sleep(time.Second)    tempBucket := []byte("TMP")    db.Update(func(tx *bolt.Tx) error {        data := Row{            Key: Key{                Head:    0x1A1A1A,                Mark:    0x1010,                Counter: 0x01,            },            At:      time.Now().UTC().Unix(),            Payload: 10,        }        keyBytes, err := marshal(&data.Key)        if err != nil {            return erp(err)        }        dataBytes, err := marshal(&data)        if err != nil {            return erp(err)        }        b, err := tx.CreateBucketIfNotExists(tempBucket)        if err != nil {            return erp(err)        }        err = b.Put(keyBytes, dataBytes)        if err != nil {            return erp(err)        }        return nil    })    db.View(func(tx *bolt.Tx) error {        b := tx.Bucket(tempBucket)        c := b.Cursor()        for k, v := c.First(); k != nil; k, v = c.Next() {            k, v := k, v            fmt.Println(k, v)            dt := Row{}            err := unmarshal(&dt, v)            if err != nil {                return erp(err)            }            fmt.Printf("key=%X, value=%v\n", k, dt)        }        return nil    })}func erp(e error) error {    log.Println(e)    return e}func marshal(pointerToData interface{}) ([]byte, error) {    buf := new(bytes.Buffer)    err := binary.Write(buf, Endian, pointerToData)    if err != nil {        return nil, err    }    return buf.Bytes(), nil}
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

要自然排序密钥,请使用 BigEndian

在 LittleEndian 中,字节被交换,这会让它乱序。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信