b66abdf6ba
This code is still prototype at this time. It appears to function correctly but something consumes more memory than is considered reasonable for the dataset comprised of the full bitcoind chain. Not recommened for use at this time.
56 lines
1 KiB
Go
56 lines
1 KiB
Go
//
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
"github.com/syndtr/goleveldb/leveldb/opt"
|
|
)
|
|
|
|
type tst struct {
|
|
key int
|
|
value string
|
|
}
|
|
|
|
var dataset = []tst{
|
|
//var dataset = []struct { key int, value string } {
|
|
{1, "one"},
|
|
{2, "two"},
|
|
{3, "three"},
|
|
{4, "four"},
|
|
{5, "five"},
|
|
}
|
|
|
|
func main() {
|
|
|
|
ro := &opt.ReadOptions{}
|
|
wo := &opt.WriteOptions{}
|
|
|
|
ldb, err := leveldb.OpenFile("dbfile", &opt.Options{Flag: opt.OFCreateIfMissing})
|
|
if err != nil {
|
|
fmt.Printf("db open failed %v\n", err)
|
|
return
|
|
}
|
|
|
|
batch := new(leveldb.Batch)
|
|
for _, datum := range dataset {
|
|
key := fmt.Sprintf("%v", datum.key)
|
|
batch.Put([]byte(key), []byte(datum.value))
|
|
}
|
|
err = ldb.Write(batch, wo)
|
|
|
|
for _, datum := range dataset {
|
|
key := fmt.Sprintf("%v", datum.key)
|
|
data, err := ldb.Get([]byte(key), ro)
|
|
|
|
if err != nil {
|
|
fmt.Printf("db read failed %v\n", err)
|
|
}
|
|
|
|
if string(data) != datum.value {
|
|
fmt.Printf("mismatched data from db key %v val %v db %v", key, datum.value, data)
|
|
}
|
|
}
|
|
fmt.Printf("completed\n")
|
|
ldb.Close()
|
|
}
|