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的更多相关文章
随机推荐
- 40款非常棒的 jQuery 插件和制作教程(系列一)
jQuery 在现在的 Web 开发项目中扮演着重要角色,jQuery 让网站有更好的可用性和用户体验,让访问者对网站留下非常好的印象.jQuery以其插件众多.独特.轻量以及支持大规模的网站开发闻名 ...
- mysql史上最全的学习资料
Ⅰ.mysql 1.mysql小基础 (1)数据类型 类型 备注 tinyint/smallint/mediumint/int/bigint 1B/2B/3B/4B/8B float/double 单 ...
- Mybatis 系列5
上篇系列4中 为大家介绍了mybatis中别名的使用,以及其源码.本篇将为大家介绍TypeHandler, 并简单分析其源码. Mybatis中的TypeHandler是什么? 无论是 MyBatis ...
- 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。
快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...
- [Micropython]TPYBoard v10x MFRC522智能门禁系统
MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.也就是射频卡. 经常忘带钥匙,最尴尬的上周竟然去开4楼的门,(家住五楼,无电梯),开了好一会没打开,事后对4楼 ...
- spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appB ...
- (四)SpringBoot2.0基础篇- 多数据源,JdbcTemplate和JpaRepository
在日常开发中,经常会遇到多个数据源的问题,而SpringBoot也有相关API:Configure Two DataSources:https://docs.spring.io/spring-boot ...
- HTML语义化基础
body { background-color: rgb(60,60,60) } 为使页面呈现较好的内容结构,所以对网页进行布局时,将页面相关元素集中在一起,形成页眉.文章.页脚.侧边栏等元素块,刚开 ...
- python_字典 list_4
>>> import string>>> import random #组合字符>>> x=string.ascii_letters+string ...
- mysql在ubuntu中的操作笔记(详)
1.安装mysql客户端流程: - 登录navicat官网下载 - 将压缩包拷贝ubuntu中进行解压,解压命令:tar zxvf navicat.tar.gz - 进入解压目录,运行命令./s ...