• 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()
    }

  • 相关阅读:
    ofbiz初级教程
    IBASE4J开发环境搭建
    Nginx在windows上安装 及 Nginx的配置及优化
    Windows里正确安装Zookeeper以服务运行
    分享一个完整的Mybatis分页解决方案
    jquery weui ajax滚动加载更多
    Spring+Mybatis+SpringMVC后台与前台分页展示实例
    Mysql怎么样避免全表扫描,sql查询优化
    SQL优化|Java面试题
    mysql 全表扫描、全索引扫描、索引覆盖(覆盖索引)
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461659.html
Copyright © 2020-2023  润新知