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

  • 相关阅读:
    一段c++程序
    一个简单的实现奇 偶判断的代码
    标签记忆法设想
    心算 进制转换 心得 =》 任意进制的数 转 任意进制的数
    PHP面试题
    commons-net使用FTP进行文件下载导致内容乱码的原因
    java中的各种锁机制
    HBase写入过快性能分析及调优
    Hbase Export与Import完成数据迁移
    Linux环境下Oracle19C使用数据泵impdp命令导入dmp文件
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461659.html
Copyright © 2011-2022 走看看