当前位置: 首页 > 工具软件 > BoltDB > 使用案例 >

BoltDB 小巧强悍的键值数据库 golang 实现时序数据存档查询

白飞飙
2023-12-01
func LoadCmdMap() {

    CmdMap = make(map[string]CmdMsgIndex)

    Db, err := bolt.Open(dbName, 0600, nil)

    if err != nil {

        log.Panicf("open the Dbfailed! %v\n", err)

    }

    err = Db.Update(func(tx *bolt.Tx) error {

        b := tx.Bucket([]byte(bkName))

        if b == nil {

            b, err = tx.CreateBucket([]byte(bkName))

            if err != nil {

                log.Panicf("create the bucket [%s] failed! %v\n", bkName, err)

            }

        }

        if b != nil {

            var cmdmsgindex CmdMsgIndex

            cmdmsgindex.TimeStamp = time.Now().Format("2006-01-02 15:04:05") //获取的时间的格式

            cmdmsgindex.Cmd = "startup"

            cmdmsgindex.ExcuteStatus = true

            cmdmsgindex.Sid = fmt.Sprintf("%d", 10000)

            cmdmsgindex.Type = 10000

            err := b.Put([]byte(cmdmsgindex.TimeStamp), Serialize(cmdmsgindex))

            if nil != err {

                log.Panicf("put the data of new block into Dbfailed! %v\n", err)

            }

            if err != nil {

                fmt.Print(err.Error())

            }

        }

        return nil

    })

    /*

        Db.View(func(tx *bolt.Tx) error {

            // Assume bucket exists and has keys

            b := tx.Bucket([]byte(bkName))

            c := b.Cursor()

            CmdMap = make(map[int]CmdMsgIndex)

            for k, v := c.First(); k != nil; k, v = c.Next() {

                key := DeserilizeBlock(k).(int)

                value := DeserilizeBlock(v).(CmdMsgIndex)

                CmdMap[key] = value

            }

            return nil

        })

    */

    Db.View(func(tx *bolt.Tx) error {

        // Assume our events bucket exists and has RFC3339 encoded time keys.

        c := tx.Bucket([]byte(bkName)).Cursor()

        // Our time range spans the 90's decade.

        nowTime := time.Now()

        getTime := nowTime.AddDate(0, -1, 0)             //年,月,日   获取一个月前的时间

        minTime := getTime.Format("2006-01-02 15:04:05") //获取的时间的格式

        maxTime := nowTime.Format("2006-01-02 15:04:05") //获取的时间的格式

        min := []byte(minTime)

        max := []byte(maxTime)



        // Iterate over the 90's.

        for k, v := c.Seek(min); k != nil && bytes.Compare(k, max) <= 0; k, v = c.Next() {

            key := byteString(k)

            value := DeserilizeBlock(v)

            fmt.Println(key, value)

            CmdMap[value.Sid] = *value

        }



        return nil

    })



}

func ViewDb() {

    Db.View(func(tx *bolt.Tx) error {

        // Assume our events bucket exists and has RFC3339 encoded time keys.

        c := tx.Bucket([]byte("Events")).Cursor()

        // Our time range spans the 90's decade.

        nowTime := time.Now()

        getTime := nowTime.AddDate(0, -1, 0)             //年,月,日   获取一个月前的时间

        minTime := getTime.Format("2006-01-02 15:04:05") //获取的时间的格式

        maxTime := nowTime.Format("2006-01-02 15:04:05") //获取的时间的格式

        min := []byte(minTime)

        max := []byte(maxTime)



        // Iterate over the 90's.

        for k, v := c.Seek(min); k != nil && bytes.Compare(k, max) <= 0; k, v = c.Next() {

            key := byteString(k)

            value := DeserilizeBlock(v)

            fmt.Println(key, value)

            CmdMap[value.Sid] = *value

        }



        return nil

    })

}

 

 类似资料: