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()
}
index_levedb.go的更多相关文章
随机推荐
- coco2dx添加类报错
			
最近刚开始学习2dx,用的vs编辑器,现在说说我使用时碰到的一点小问题: 我使用的类添加向导,但是添加的类在win32目录下,而且编译的时候总是提示找不到 .h 文件 其实,这样添加类不是很好,可以在 ...
 - asp.net core中写入自定义中间件
			
首先要明确什么是中间件?微软官方解释:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnet ...
 - asp.net 调试与iis部署的问题
			
第一个问题:编译器错误信息: CS0016: 未能写入输出文件"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET ...
 - 负载均衡之让nginx跑起来
			
一个简单的原因,我不得不考虑负载 小源做了个网站,很简单,传统的java开放框架,和一个tomcat搞定,让人没想到的是网站既然火起来了,很快一个tomcat就搞不定了,怎么办? 网站访问量很大,既然 ...
 - app  ionic1  微信 微博 分享功能的实现
			
微信分享 1.登录微信开放平台注册账户 2.创建一个移动应用 (app) 审核过后会有一个appid 之后安装插件的时候会用到 3.在这个应用上面填写 包名 和 签名 就可以了 包名和签名的 ...
 - CDH安装系统环境准备——系统版本和安装包下载地址指南
			
由于Hadoop深受客户欢迎,许多公司都推出了各自版本的Hadoop,也有一些公司则围绕Hadoop开发产品.在Hadoop生态系统中,规模最大.知名度最高的公司则是Cloudera.接下来的日子里, ...
 - Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)
			
之前项目中没有涉及到显示gif图片的功能,也没有着重研究过,最近项目中要用到显示gif图片,于是就在网上一顿搜,用过之后发现如下几个缺点. 1.加载大的gif图片会出现oom. 2.没有预加载和缓存功 ...
 - 阅读spring源码
			
读Spring源码之前,你要先清楚,为什么你要用Spring... Spring最基本的功能是做为管理bean的容器,所以我以为应该先从org.springframework.context包了解咯, ...
 - ubuntu导入公钥的方法
			
导入公钥的办法: #方法1: gpg --keyserver subkeys.pgp.NET --recv 6E871C4A881574DEgpg --export --armor 6E871C4A8 ...
 - 完美解决ScollView内嵌ListView的问题
			
1.之前看了别人的一代码,解决办法是自己定制一个ListView,代码如下: public class NoScrollListView extends ListView { public NoScr ...