Golang 之 key-value LevelDB

时常会在应用中用到数据库功能,象 Key-Value 性质的。直接搬个 Redis,Mysql嫌大,好在有 LevelDB,直接编进应用中。

有关什么是 LevelDB 以及 LevelDB 的特性,可Google之,我们看看如何用。

先要

go get github.com/syndtr/goleveldb/leveldb

然后在文件中 import 进来。

1.打开数据库

db,err = leveldb.OpenFile("./db",nil)
if (err != nil) { panic(err) }

如果这里如果有错,直接报了。

2.然后,读用 db.Get, 写用 db.Put 。

3.代码中的一小段。

package main

import (
    "github.com/syndtr/goleveldb/leveldb"
    "fmt"
    "strconv"
)

var db *leveldb.DB

const ID_FIELD  =  "id"

func init(){
    var err error
    db,err = leveldb.OpenFile("./db",nil)
    if (err != nil) {
        panic(err)
    }

    _,err = db.Get([]byte(ID_FIELD),nil)
    if (err!=nil) {
        db.Put([]byte(ID_FIELD),[]byte("10000"),nil)
    }
}

func GetNextId() int {
    ids,err := db.Get([]byte(ID_FIELD),nil)
    if (err != nil) {
        fmt.Println(err)
    }
    id := Byte2int(ids)
    db.Put([]byte(ID_FIELD),Int2byte(id+1),nil)
    return id
}

func Byte2int(val []byte) int {
    var result int
    result,_ = strconv.Atoi(string(val))
    return result
}

func Int2byte(val int) []byte {
    result := []byte(strconv.Itoa(val))
    return result
}
时间: 2024-08-24 21:31:51

Golang 之 key-value LevelDB的相关文章

大规模排行榜系统实践及挑战

版权声明:本文由唐聪原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/154 来源:腾云阁 https://www.qcloud.com/community 排行榜满足了人的攀比.炫耀心理,几乎每个产品都会涉及.SNG增值产品部的QQ会员.QQ动漫.企鹅电竞.游戏赛事等大量业务都对排行榜有强烈需求,特别是企鹅电竞等业务的发展壮大对我们排行榜系统提出了更多要求和挑战.在过去的一年中,排行榜系统从无到有,接入的业务从单一的QQ

Haproxy Configure File

---------------------- HAProxy Configuration Manual ---------------------- version 1.5.11 willy tarreau 2015/02/01 This document covers the configuration language as implemented in the versionspecified above. It does not provide any hint, example or

Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?

转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布式消息处理系统Apache Kafka来实现消息服务,并使用资源管理器Apache Hadoop YARN实现容错处理.处理器隔离.安全性和资源管理.近日,从Apache官方博客中得知,开源的分布式流处理框架Samza历经18个月的孵化期后终于升级成为Apache的顶级项目.Samza由Linked

在golang中使用leveldb

leveldb是一个非常强悍的kv数据库,自然,我也希望能在go中使用. 假设有官方的go leveldb实现,那我会优先考虑.譬如这个.可是该库文档全然没有,而且在网上没发现有人用于实战环境.对其是否能在生产环境中使用打上问号,保险起见,我还是决定不使用. 由于leveldb有c的接口,所以通过cgo能非常方便的进行集成,所以我决定採用该种方式,幸运的是,已经有人做了cgo的版本号,也就是levigo. 使用levigo.须要编译安装leveldb,假设须要压缩支持还须要编译snappy,为了

161104、NoSQL数据库:key/value型之levelDB介绍及java实现

简介:Leveldb是一个google实现的非常高效的kv数据库,能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.特别是LSM算法.LevelDB 是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w. 原理(可以查看相关原理图更容易理解,非常类似于hadoop的某些组件实现) 1.Files leveldb的实现类似于Bigtable中的一个tablet(Google),只

leveldb源码分析--Key结构

[注]本文参考了sparkliang的专栏的Leveldb源码分析--3并进行了一定的重组和排版 经过上一篇文章的分析我们队leveldb的插入流程有了一定的认识,而该文设计最多的又是Batch的概念.这篇文章本来应该顺理成章的介绍Batch相关流程和结构了,但是Batch涉及到了一些编码和Key相关的概念,所以我觉得应该先理清这方面的概念有助于大家更容易理解后面的内容. 在dbformat.h/cc文件中我们首先看到的是 typedef uint64_t SequenceNumber; str

golang里使用高性能kv库leveldb

golang实现的leveldb,是由leveldb原作者写的,所以大家可以放心大胆使用.使用方法如下: https://github.com/syndtr/goleveldb/blob/master/README.md godoc地址如下: http://godoc.org/github.com/syndtr/goleveldb/leveldb

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的.由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的.熟悉hashmap的同学对这个情况应该非常清楚. 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明. 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语

golang中的slice翻转存在以及map中的key判断

//slice翻转 func stringReverse(src []string){ if src == nil { panic(fmt.Errorf("the src can't be empty!")) } count := len(src) mid := count/2 for i := 0;i < mid; i++{ tmp := src[i] src[i] = src[count-1] src[count-1] = tmp count-- } } //判断是否包含 f