zoukankan      html  css  js  c++  java
  • 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()
    }

  • 相关阅读:
    python面向对象基本概念(OOP)
    python函数进阶(函数参数、返回值、递归函数)
    python变量进阶(可变不可变,局部变量和全局变量)
    1.面试题 排序算法总结
    前端性能优化
    对键盘事件的监控
    数据处理2
    强制提交git
    webpack学习记录
    数据处理 筛选
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461617.html
Copyright © 2011-2022 走看看