geth自带数据库leveldb测试

geth自带了一个leveldb key-value数据库,区块信息写入leveldb中,在以太坊的源码下测试一下leveldb,源码搭建过程请参考我的另外一篇博客

package main


import (
"fmt"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/filter"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/errors"
"strconv"
//"encoding/hex"
//"log"
)


var db *leveldb.DB
  
const ID_FIELD = "id"


func inita() {
fmt.Println("init.......")
var err error
db, err = leveldb.OpenFile("D:/levelDb/", nil)
if err != nil {
panic(err)
}


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


fmt.Println(string(value[:]))
}


func delete() {
db, err := leveldb.OpenFile("D:/levelDb/", nil)
db.Put([]byte(ID_FIELD), []byte("10000"), nil)
db.Delete([]byte(ID_FIELD), nil)
value, err := db.Get([]byte(ID_FIELD), nil)
if err != nil {
fmt.Println(err)
}


fmt.Println("aaa:", string(value[:]))
}


func iteratora() {
db, _ := leveldb.OpenFile("D:/levelDb/", nil)
db.Put([]byte(ID_FIELD), []byte("10000"), nil)
db.Put([]byte("aaaa"), []byte("2222"), nil)
var iterator iterator.Iterator = db.NewIterator(nil, nil)
for iterator.Next() {
fmt.Println(string(iterator.Key()[:]))
fmt.Println(string(iterator.Value()[:]))
}
}


func iteratorb() {
db, err := leveldb.OpenFile("D:/gethLevelDb", nil)
if err != nil {
fmt.Println(err)
}
var iterator iterator.Iterator = db.NewIterator(nil, nil)
fmt.Println(iterator)
var i int
for iterator.Next() {
//48 62000000000000000 68000000000000000 72000000000000000
//fmt.Println(hex.EncodeToString(iterator.Key()))
i++
//BlockchainVersion,LastBlock,LastFast,LastHeader
//fmt.Println(string(iterator.Key()[:]))
}
fmt.Println("len", i)
}


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
}


func gethRead() {
db, err := leveldb.OpenFile("D:/gethLevelDb", nil)
if err != nil {
fmt.Println("11", err)
}
//var key string = "70934ac33605b77492fc70b239833effb6e7da87f7139d4205bc63267f40c749"
//byteKey,err2:= hex.DecodeString(key)
// if err2 != nil {
// fmt.Println("22",err2)
// }
var key string = "11111111111111111"
value, err3 := db.Get([]byte(key), nil)
if err3 != nil {
fmt.Println("33", err3)
}


fmt.Println(string(value))
}


func gethRead2() {
db, err := leveldb.OpenFile("D:/workspace4/geth/chain/chain0/geth/chaindata/", nil)
if err != nil {
fmt.Println("11", err)
}
var key string = "11111111111111111"
value, err3 := db.Get([]byte(key), nil)
if err3 != nil {
fmt.Println("33", err3)
}


fmt.Println(string(value))
}


func gethDB() *leveldb.DB{
var file string = "D:/workspace4/geth/chain/chain0/geth/chaindata/"
db, err := leveldb.OpenFile(file,  &opt.Options{
OpenFilesCacheCapacity: 16,
BlockCacheCapacity:     16 / 2 * opt.MiB,
WriteBuffer:            16 / 4 * opt.MiB,
Filter:                 filter.NewBloomFilter(10),
})
if _, corrupted := err.(*errors.ErrCorrupted); corrupted {
db, err = leveldb.RecoverFile(file, nil)
}
if err != nil {
fmt.Println("db", err)
}
return db
}


func gethRead3() {
db1 := gethDB()
var key string = "11111111111111111"
value, err := db1.Get([]byte(key), nil)
if err != nil {
fmt.Println("33", err)
}


fmt.Println("aa",string(value))

db2 := gethDB()

value2, err2 := db2.Get([]byte(key), nil)
if err2 != nil {
fmt.Println("44", err2)
}


fmt.Println("bb",string(value2))

value3, err3 := db1.Get([]byte(key), nil)
if err3 != nil {
fmt.Println("55", err3)
}


fmt.Println("cc",string(value3))
}


func main() {
gethRead3()
}


 

猜你喜欢

转载自blog.csdn.net/mbcsdn/article/details/80222577