geth comes with its own database leveldb test

geth comes with a leveldb key-value database, block information is written into leveldb, test leveldb under the source code of Ethereum, please refer to my other blog for the source code construction process

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


























 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325972787&siteId=291194637