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

index_levedb.go的更多相关文章

随机推荐

  1. “万能数据库查询分析器” 5.03发布,访问EXCEL将自动为表名前后加上中括弧

        "万能数据库查询分析器" 5.03发布,访问EXCEL将自动为表名前后加上中括弧 1          引言    中国本土程序员马根峰推出的个人作品----万能数据库查询 ...

  2. Course3-Python文件I/O

    1. 读取键盘输入 Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1). raw_input. raw_input([prompt]) 函数从标准输入读取一个行, ...

  3. IT轮子系列(一)——DropDownList 的绑定(二)

    补记: 今天在阅读公司项目代码的时候,发现MVC中的dropdownlist已经封装了数据绑定方式.相对于第一篇文章,这样的方式更简便.简洁.现记录如下: 首先,创建我们的数据模型 如下图: 模型代码 ...

  4. 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

    不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味. 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象.抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性.如果抽象 ...

  5. 接口和抽象类的区别(JDK1.8)

    1.一个类只能进行单继承,但可以实现多个接口. 2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法: 接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的 ...

  6. Mysql 查询条件中字符串尾部有空格也能匹配上的问题

    一.表结构 TABLE person id name 1 你 2 你(一个空格) 3 你(二个空格) 二.查询与结果 select * from person where `name` = ? 无论 ...

  7. AUTOSAR - 标准文档下载

    官网 https://www.autosar.org/ 文档分类 按功能分 按类型分 CLASSIC PLATFORM The AUTOSAR Classic Platform architectur ...

  8. datalist 分页

    Asp.net提供了三个功能强大的列表控件:GridView.DataList和Repeater控件,相对GridView,DataList和Repeater控件具有更高的样式自定义性,很多时候我们喜 ...

  9. Maven项目管理工具

    Maven项目管理工具 白面郎君 Svn eclipse maven量级 1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目 ...

  10. 一文读懂阻塞、非阻塞、同步、异步IO

    介绍 在谈及网络IO的时候总避不开阻塞.非阻塞.同步.异步.IO多路复用.select.poll.epoll等这几个词语.在面试的时候也会被经常问到这几个的区别.本文就来讲一下这几个词语的含义.区别以 ...