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

  • 相关阅读:
    贪心 CodeForces 137B Permutation
    贪心 CodeForces 124B Permutations
    数学 SCU 4436 Easy Math
    模拟+贪心 SCU 4445 Right turn
    ACM配置指南
    ACM牛人博客
    ✅问题:Rails.ajax自定义请求
    Jbuilder(3300✨)
    关于keyCode, 键盘代码。 和零散的javascript知识。http://js2.coffee/(转化工具)
    ✅javascript 语法:附加子节点
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461617.html
Copyright © 2011-2022 走看看