zoukankan      html  css  js  c++  java
  • bolt_storage.go

    package storage
    //bolt存储引擎实现  
    import (
        "github.com/boltdb/bolt"
        "time"
    )

    var wukong_documents = []byte("wukong_documents")
    //bolt结构体 实现  同时实现storage接口
    type boltStorage struct {
        db *bolt.DB
    }
    //实现存储引擎map集合  实现value  对应的函数  
    func openBoltStorage(path string) (Storage, error) {
        db, err := bolt.Open(path, 0600, &bolt.Options{Timeout: 3600 * time.Second})
        if err != nil {
            return nil, err
        }
        err = db.Update(func(tx *bolt.Tx) error {
            _, err := tx.CreateBucketIfNotExists(wukong_documents)
            return err
        })
        if err != nil {
            db.Close()
            return nil, err
        }
        return &boltStorage{db}, nil
    }

    func (s *boltStorage) WALName() string {
        return s.db.Path()
    }

    func (s *boltStorage) Set(k []byte, v []byte) error {
        return s.db.Update(func(tx *bolt.Tx) error {
            return tx.Bucket(wukong_documents).Put(k, v)
        })
    }

    func (s *boltStorage) Get(k []byte) (b []byte, err error) {
        err = s.db.View(func(tx *bolt.Tx) error {
            b = tx.Bucket(wukong_documents).Get(k)
            return nil
        })
        return
    }

    func (s *boltStorage) Delete(k []byte) error {
        return s.db.Update(func(tx *bolt.Tx) error {
            return tx.Bucket(wukong_documents).Delete(k)
        })
    }

    func (s *boltStorage) ForEach(fn func(k, v []byte) error) error {
        return s.db.View(func(tx *bolt.Tx) error {
            b := tx.Bucket(wukong_documents)
            c := b.Cursor()
            for k, v := c.First(); k != nil; k, v = c.Next() {
                if err := fn(k, v); err != nil {
                    return err
                }
            }
            return nil
        })
    }

    func (s *boltStorage) Close() error {
        return s.db.Close()
    }

  • 相关阅读:
    BZOJ 4886 Lydsy1705月赛 叠塔游戏
    BZOJ 4552 TJOI2016&&HEOI2016 排序
    BZOJ 3702 二叉树
    BZOJ 4756 Usaco2017 Jan Promotion Counting
    BZOJ 4842 Neerc2016 Delight for a Cat
    BZOJ 1283 序列
    BZOJ 4819 SDOI2017 新生舞会
    BZOJ 1531 POI2005 Bank notes
    BZOJ 1925 SDOI2010 地精部落
    BZOJ WC2006 水管局长数据加强版
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461659.html
Copyright © 2011-2022 走看看