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的更多相关文章
随机推荐
- cocos2dx 跨平台编译遇到的几个问题
首先声明一下自己用的版本 vs2010 cocos2d-x_2.2 ndk_r9 1. 安装cygwin之后,也设置好了 ndk_root, 但是 cd $NDK_ROOT 进入不了, 只好 ...
- form表单提交转为可被 getModel(PROJECT.class ,null);接收
var form = new mini.Form("#editForm"+id); form.validate();if (!form.isValid()) { alert('信息 ...
- linux_熟悉常用Linux命令
man :任何时候你觉得对一个命令行不是很确定,都可以通过输入"man + 命令"来了解这个命令能确切是做什么的. ls :列出目录内容. pwd :在终端中显示当前工作目录的全路 ...
- Ajax+jquery+jaso传输数据
所谓的Ajax.这里我们讲二种方法 方法一:(微软有自带Ajax框架) 在Asp.net里微软有自己的Ajax框架.就是在页面后台.cs文件里引入 using System.Web.Service ...
- Activex、OLE、COM、OCX、DLL之间有什么区别?
来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html 熟悉面向对象编程和网络编程的人一定对ActiveX ...
- Android layout_margin 无效的解决办法
http://www.aichengxu.com/view/31025 1.如果LinearLayout中使用Android:layout_marginRight不起作用,通过测试原来在android ...
- RDC去省赛玩前の日常训练 Chapter 1
4/3 技能点 A. 生成树的计数 论文:周冬<生成树的计数及其应用>(看不懂 pending) 一个栗子:Codeforces 719D 两个做法 Matrix-Tree + 高斯消元, ...
- erlang的脚本执行---escript
1.概述: 作为程序员对于脚本语言应该很熟悉了,脚本语言的优点很多,如快速开发.容易编写.实时开发和执行, 我们常用的脚本有Javascript.shell.python等,我们的erlang语言也有 ...
- python新手---学习第一天
Python是一门跨平台.开源.免费的解释型高级动态编程语言,它支持伪编译将源代码转换成字节码来优化程序提高运行速度和对源码进行保密,并且支持使用py2exe.pyinstaller.cx_Freez ...
- Maven的使用
在项目中,我们通常会为项目添加多种多样的依赖包(jar包),去网上下载,然后引入到项目中,很是麻烦. 但是用maven后,这一切都将变得简单起来.由于我的MyEclipse已经集成了maven插件,这 ...