最近读filecoin lotus源码 需要修改对应的sectors的storage path 最后发现使用leveldb保存的。
所以就需要调研下leveldb(插入代码 居然没有golang 博客园对golang有意见吗)
package main import ( "bytes" "fmt" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/util" "strconv" ) func main() { //创建并打开数据库 db, err := leveldb.OpenFile("./metadata", nil) if err != nil { panic(err) } defer db.Close() //关闭数据库 //fmt.Println(db) //写入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) db.Put([]byte("key1"), []byte("w value1"), 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("key1"), 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("1"), Limit: []byte("100")}, nil) for iter.Next() { fmt.Printf("key:%s, value:%s\n", iter.Key(), iter.Value()) } iter.Release() readAll(db) } //遍历所有key value func readAll(db *leveldb.DB) { iter := db.NewIterator(nil, nil) for iter.Next() { key := string(iter.Key()) 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() }
浙公网安备 33010602011771号