美文网首页
goleveldb代码示例

goleveldb代码示例

作者: 莫名FCJ | 来源:发表于2017-11-03 14:38 被阅读1379次

    LevelDB入门

    LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般
    也就是说,LevelDB很适合应用在查询较少,而写很多的场景
    key和value都是任意长度的字节数组
    entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数
    提供的基本操作接口:Put()、Delete()、Get()、Batch()
    支持批量操作以原子操作进行
    可以创建数据全景的snapshot(快照),并允许在快照中查找数据
    可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot)
    自动使用Snappy压缩数据
    非关系型数据模型(NoSQL),不支持sql语句,也不支持索引
    一次只允许一个进程访问一个特定的数据库
    没有内置的C/S架构,但开发者可以使用LevelDB库自己封装一个server

    代码

    https://github.com/fengchunjian/goexamples/tree/master/goleveldb

    //goleveldb.go
    package main
    
    import (
        "fmt"
        "github.com/syndtr/goleveldb/leveldb"
        "github.com/syndtr/goleveldb/leveldb/util"
        "strconv"
    )
    
    func main() {
        //创建并打开数据库
        db, err := leveldb.OpenFile("./db", nil)
        if err != nil {
            panic(err)
        }
    
        defer db.Close() //关闭数据库
    
        //写入5条数据
        db.Put([]byte("key1"), []byte("value1"), nil)
        db.Put([]byte("key2"), []byte("value2"), nil)
        db.Put([]byte("key3"), []byte("value3"), nil)
        db.Put([]byte("key4"), []byte("value4"), nil)
        db.Put([]byte("key5"), []byte("value5"), nil)
    
        //循环遍历数据
        fmt.Println("循环遍历数据")
        iter := db.NewIterator(nil, nil)
        for iter.Next() {
            fmt.Printf("key:%s, value:%s\n", iter.Key(), iter.Value())
        }
        iter.Release()
    
        //读取某条数据
        data, _ := db.Get([]byte("key2"), nil)
        fmt.Printf("读取单条数据key2:%s\n", data)
    
        //批量写入数据
        batch := new(leveldb.Batch)
        batch.Put([]byte("key6"), []byte(strconv.Itoa(10000)))
        batch.Put([]byte("key7"), []byte(strconv.Itoa(20000)))
        batch.Delete([]byte("key4"))
        db.Write(batch, nil)
    
        //查找数据
        key := "key7"
        iter = db.NewIterator(nil, nil)
        for ok := iter.Seek([]byte(key)); ok; ok = iter.Next() {
            fmt.Printf("查找数据:%s, value:%s\n", iter.Key(), iter.Value())
        }
        iter.Release()
    
        //按key范围遍历数据
        fmt.Println("按key范围遍历数据")
        iter = db.NewIterator(&util.Range{Start: []byte("key3"), Limit: []byte("key7")}, nil)
        for iter.Next() {
            fmt.Printf("key:%s, value:%s\n", iter.Key(), iter.Value())
        }
        iter.Release()
    }
    

    编译运行

    go get github.com/syndtr/goleveldb/leveldb
    go build goleveldb.go
    ./goleveldb
    循环遍历数据
    key:key1, value:value1
    key:key2, value:value2
    key:key3, value:value3
    key:key4, value:value4
    key:key5, value:value5
    读取单条数据key2:value2
    查找数据:key7, value:20000
    按key范围遍历数据
    key:key3, value:value3
    key:key5, value:value5
    key:key6, value:10000
    
    QQ图片20171103143200.png

    参考文档

    Golang 之 key-value LevelDB
    http://www.cnblogs.com/qufo/p/5701237.html
    This is an implementation of the LevelDB key/value database in the Go programming language.
    https://github.com/syndtr/goleveldb
    LevelDB详解
    http://blog.csdn.net/linuxheik/article/details/52768223

    相关文章

      网友评论

          本文标题:goleveldb代码示例

          本文链接:https://www.haomeiwen.com/subject/ouetmxtx.html