1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| package main
import ( "errors" "github.com/tecbot/gorocksdb" "log" "strconv" )
const ( DB_PATH = "/rocksdb" )
func main() { db, err := OpenDB() if err != nil { log.Println("fail to open db,", nil, db) }
readOptions := gorocksdb.NewDefaultReadOptions() readOptions.SetFillCache(true)
writeOptions := gorocksdb.NewDefaultWriteOptions() writeOptions.SetSync(true)
for i := 0; i < 10; i++ { keyStr := "test" + strconv.Itoa(i) var key []byte = []byte(keyStr) db.Put(writeOptions, key, key) log.Println(i, keyStr) slice, err2 := db.Get(readOptions, key) if err2 != nil { log.Println("get data exception:", key, err2) continue } log.Println("get data:", slice.Size(), string(slice.Data())) }
}
func OpenDB() (*gorocksdb.DB, error) { options := gorocksdb.NewDefaultOptions() options.SetCreateIfMissing(true)
bloomFilter := gorocksdb.NewBloomFilter(10)
readOptions := gorocksdb.NewDefaultReadOptions() readOptions.SetFillCache(false)
rateLimiter := gorocksdb.NewRateLimiter(10000000, 10000, 10) options.SetRateLimiter(rateLimiter) options.SetCreateIfMissing(true) options.EnableStatistics() options.SetWriteBufferSize(8 * 1024) options.SetMaxWriteBufferNumber(3) options.SetMaxBackgroundCompactions(10)
options.SetHashSkipListRep(2000000, 4, 4)
blockBasedTableOptions := gorocksdb.NewDefaultBlockBasedTableOptions() blockBasedTableOptions.SetBlockCache(gorocksdb.NewLRUCache(64 * 1024)) blockBasedTableOptions.SetFilterPolicy(bloomFilter) blockBasedTableOptions.SetBlockSizeDeviation(5) blockBasedTableOptions.SetBlockRestartInterval(10) blockBasedTableOptions.SetBlockCacheCompressed(gorocksdb.NewLRUCache(64 * 1024)) blockBasedTableOptions.SetCacheIndexAndFilterBlocks(true) blockBasedTableOptions.SetIndexType(gorocksdb.KHashSearchIndexType)
options.SetBlockBasedTableFactory(blockBasedTableOptions) options.SetPrefixExtractor(gorocksdb.NewFixedPrefixTransform(3))
options.SetAllowConcurrentMemtableWrites(false)
db, err := gorocksdb.OpenDb(options, DB_PATH)
if err != nil { log.Fatalln("OPEN DB error", db, err) db.Close() return nil, errors.New("fail to open db") } else { log.Println("OPEN DB success", db) } return db, nil }
|