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

最新文章

  1. iOS开发UI中懒加载的使用方法
  2. beautifulsoup测试
  3. Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)
  4. 监控系统 - check_mk_agent
  5. Linux命令:tail命令详解
  6. cocos2d-x3.0 Physics新的物理引擎
  7. Gengxin讲STL系列——String
  8. Mozilla5.0的含义
  9. 使用SplitContainer来实现隐藏窗口的部分内容(转)
  10. Win10下JDK下载与环境变量配置
  11. 数独计算(C#)
  12. MySQL初识
  13. Python介绍及环境配置
  14. 采用xtrabackup部署主从同步
  15. qsort代码(pascal/c/c++)与思想及扩展(随机化,TopK)
  16. mybatis中批量插入以及更新
  17. 超多的CSS3圆角渐变网页按钮
  18. 笔记本电脑CPU低压、标压、高压的区别
  19. MySQL InnoDB的一些参数说明
  20. TE7下的创建组件AxHost失败

热门文章

  1. 恶补web之三:http学习
  2. C# 操作Excel数据透视表
  3. linux 常见命令及说明杂记
  4. 页面加载完之前显示Loading
  5. MQ队列管理器搭建(三)
  6. pyqt5 动画在QThread线程中无法运行问题
  7. javaScript(4)---数据类型
  8. eclipse乱码
  9. 免费私有gitLab服务推荐
  10. 浅谈 RxAndroid + Retrofit + Databinding