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

    package volume

    import (
        "github.com/syndtr/goleveldb/leveldb"
        "encoding/binary"
        "path/filepath"
        "strconv"
    )
    //文件索引结构体
    type LevelDBIndex struct {
        path string
        db   *leveldb.DB
    }
    //创建leveldb索引
    func NewLevelDBIndex(dir string, vid uint64) (index *LevelDBIndex, err error) {
        path := filepath.Join(dir, strconv.FormatUint(vid, 10) + ".index")
        index = new(LevelDBIndex)
        index.path = path
        index.db, err = leveldb.OpenFile(path, nil)
        return index, err
    }
    //实现index接口
    //文件是否存在  物理存在
    func (l *LevelDBIndex)Has(fid uint64) bool {
        key := make([]byte, 8)
        binary.BigEndian.PutUint64(key, fid)
        _, err := l.db.Get(key, nil)
        return err == nil
    }
    //获取文件
    func (l *LevelDBIndex)Get(fid uint64) (*FileInfo, error) {
        key := make([]byte, 8)
        binary.BigEndian.PutUint64(key, fid)
        data, err := l.db.Get(key, nil)
        if err != nil {
            return nil, err
        }
        fi := new(FileInfo)
        return fi, fi.UnMarshalBinary(data)
    }
    //存储文件
    func (l *LevelDBIndex)Set(fi *FileInfo) error {
        data := fi.MarshalBinary()
        return l.db.Put(data[:8], data, nil)
    }
    //删除文件
    func (l *LevelDBIndex)Delete(fid uint64) error {
        key := make([]byte, 8)
        binary.BigEndian.PutUint64(key, fid)
        return l.db.Delete(key, nil)
    }
    //关闭资源
    func (l *LevelDBIndex)Close() error {
        return l.db.Close()
    }

  • 相关阅读:
    log4net 无法输出日志,跟踪发现IsErrorEnabled等,都是Flase
    jquery load加载不了内容
    数据库中的表还是一定要建索引
    最近的项目中用到读卡器,用的华视身份证阅读器,附上SDK使用手册
    背景自动滚动
    理解JavaScript函数(函数和对象的区别和联系)
    代码运行框
    ie8以ie7方式解析
    js开发工具集
    cssZip
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461617.html
Copyright © 2011-2022 走看看