本文整理汇总了Golang中github.com/syndtr/goleveldb/leveldb.DB类的典型用法代码示例。如果您正苦于以下问题:Golang DB类的具体用法?Golang DB怎么用?Golang DB使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DB类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: saveItem
func saveItem(db *leveldb.DB, it *gohn.Item) {
pbmsg, err := proto.Marshal(it)
check(err)
key := []byte(strconv.Itoa(int(it.GetId())))
err = db.Put(key, pbmsg, nil)
check(err)
}
示例2: ldbAvailability
func ldbAvailability(db *leveldb.DB, folder, file []byte) []protocol.DeviceID {
k := globalKey(folder, file)
bs, err := db.Get(k, nil)
if err == leveldb.ErrNotFound {
return nil
}
if err != nil {
panic(err)
}
var vl versionList
err = vl.UnmarshalXDR(bs)
if err != nil {
panic(err)
}
var devices []protocol.DeviceID
for _, v := range vl.versions {
if !v.version.Equal(vl.versions[0].version) {
break
}
n := protocol.DeviceIDFromBytes(v.device)
devices = append(devices, n)
}
return devices
}
示例3: ldbListFolders
func ldbListFolders(db *leveldb.DB) []string {
runtime.GC()
start := []byte{keyTypeGlobal}
limit := []byte{keyTypeGlobal + 1}
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
defer snap.Release()
dbi := snap.NewIterator(&util.Range{Start: start, Limit: limit}, nil)
defer dbi.Release()
folderExists := make(map[string]bool)
for dbi.Next() {
folder := string(globalKeyFolder(dbi.Key()))
if !folderExists[folder] {
folderExists[folder] = true
}
}
folders := make([]string, 0, len(folderExists))
for k := range folderExists {
folders = append(folders, k)
}
sort.Strings(folders)
return folders
}
示例4: cacheFlush
// flush a leveldb batch to database and reset batch to 0
func cacheFlush(db *leveldb.DB, batch *leveldb.Batch) {
err := db.Write(batch, nil)
if err != nil {
log.Fatal(err)
}
batch.Reset()
}
示例5: cacheLookup
func cacheLookup(db *leveldb.DB, way *osmpbf.Way) ([]map[string]string, error) {
var container []map[string]string
for _, each := range way.NodeIDs {
stringid := strconv.FormatInt(each, 10)
data, err := db.Get([]byte(stringid), nil)
if err != nil {
log.Println("denormalize failed for way:", way.ID, "node not found:", stringid)
return container, err
}
s := string(data)
spl := strings.Split(s, ":")
latlon := make(map[string]string)
lat, lon := spl[0], spl[1]
latlon["lat"] = lat
latlon["lon"] = lon
container = append(container, latlon)
}
return container, nil
// fmt.Println(way.NodeIDs)
// fmt.Println(container)
// os.Exit(1)
}
示例6: cacheStore
// write to leveldb immediately
func cacheStore(db *leveldb.DB, node *osmpbf.Node) {
id, val := formatLevelDB(node)
err := db.Put([]byte(id), []byte(val), nil)
if err != nil {
log.Fatal(err)
}
}
示例7: read_metadata
func read_metadata(filename string, metadatadb *leveldb.DB) (version int, numbytes int, exptime time.Time, exp int, err error) {
data, err2 := metadatadb.Get([]byte(filename), nil)
// log.Println(data, filename, err2)
err = err2
if err != nil {
version = 0
numbytes = 0
exptime = time.Now()
exp = 0
} else {
line := string(data)
fields := strings.Fields(line)
version, _ = strconv.Atoi(fields[0])
numbytes, _ = strconv.Atoi(fields[1])
if len(fields) == 7 {
exptime_str := fields[2] + " " + fields[3] + " " + fields[4] + " " + fields[5]
layout := "2006-01-02 15:04:05 -0700 MST"
exptime, _ = time.Parse(layout, exptime_str)
exp, _ = strconv.Atoi(fields[6])
} else {
log.Println("why here?", string(data), string(filename))
}
}
return
}
示例8: WalkTasks
//从levelDB中载入列表判断是否近期执行
func WalkTasks(base, span int64, db *leveldb.DB) {
var task Task
var err error
var ok bool
timer.DropMap = nil
timer.DropMap = make(map[string]bool)
s := time.Now()
iter := db.NewIterator(nil, nil)
parseMap := make(map[string][]string, 1024)
for iter.Next() {
key := string(iter.Key())
val := string(iter.Value())
if _, ok = parseMap[val]; ok == false {
parseMap[val] = make([]string, 0)
}
parseMap[val] = append(parseMap[val], key)
}
iter.Release()
inWalking = true
for val, keys := range parseMap {
task, err = parseTask(val)
if err == nil {
task.Base = base
ret := task.Dispatch(span, true)
for _, key := range keys {
task.Key = key
timer.Add(ret, key)
}
}
}
inWalking = false
parseMap = nil
e := time.Now()
logPrintln(e.Sub(s))
}
示例9: clearItems
func clearItems(db *leveldb.DB) error {
snap, err := db.GetSnapshot()
if err != nil {
return err
}
defer snap.Release()
// Iterate over k2
it := snap.NewIterator(util.BytesPrefix([]byte{1}), nil)
defer it.Release()
batch := new(leveldb.Batch)
for it.Next() {
k1 := it.Key()
k2 := it.Value()
// k2 should exist
_, err := snap.Get(k2, nil)
if err != nil {
return err
}
// Delete the k1 => k2 mapping first
batch.Delete(k1)
// Then the k2 => data mapping
batch.Delete(k2)
}
if testing.Verbose() {
log.Printf("batch write (clear) %p", batch)
}
return db.Write(batch, nil)
}
示例10: ldbWithAllFolderTruncated
func ldbWithAllFolderTruncated(db *leveldb.DB, folder []byte, fn func(device []byte, f protocol.FileInfoTruncated) bool) {
runtime.GC()
start := deviceKey(folder, nil, nil) // before all folder/device files
limit := deviceKey(folder, protocol.LocalDeviceID[:], []byte{0xff, 0xff, 0xff, 0xff}) // after all folder/device files
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
if debugDB {
l.Debugf("created snapshot %p", snap)
}
defer func() {
if debugDB {
l.Debugf("close snapshot %p", snap)
}
snap.Release()
}()
dbi := snap.NewIterator(&util.Range{Start: start, Limit: limit}, nil)
defer dbi.Release()
for dbi.Next() {
device := deviceKeyDevice(dbi.Key())
var f protocol.FileInfoTruncated
err := f.UnmarshalXDR(dbi.Value())
if err != nil {
panic(err)
}
if cont := fn(device, f); !cont {
return
}
}
}
示例11: ldbWithAllRepoTruncated
func ldbWithAllRepoTruncated(db *leveldb.DB, repo []byte, fn func(node []byte, f protocol.FileInfoTruncated) bool) {
defer runtime.GC()
start := nodeKey(repo, nil, nil) // before all repo/node files
limit := nodeKey(repo, protocol.LocalNodeID[:], []byte{0xff, 0xff, 0xff, 0xff}) // after all repo/node files
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
defer snap.Release()
dbi := snap.NewIterator(&util.Range{Start: start, Limit: limit}, nil)
defer dbi.Release()
for dbi.Next() {
node := nodeKeyNode(dbi.Key())
var f protocol.FileInfoTruncated
err := f.UnmarshalXDR(dbi.Value())
if err != nil {
panic(err)
}
if cont := fn(node, f); !cont {
return
}
}
}
示例12: ldbListRepos
func ldbListRepos(db *leveldb.DB) []string {
defer runtime.GC()
start := []byte{keyTypeGlobal}
limit := []byte{keyTypeGlobal + 1}
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
defer snap.Release()
dbi := snap.NewIterator(&util.Range{Start: start, Limit: limit}, nil)
defer dbi.Release()
repoExists := make(map[string]bool)
for dbi.Next() {
repo := string(globalKeyRepo(dbi.Key()))
if !repoExists[repo] {
repoExists[repo] = true
}
}
repos := make([]string, 0, len(repoExists))
for k := range repoExists {
repos = append(repos, k)
}
sort.Strings(repos)
return repos
}
示例13: getFile
//Function: getFile
//Checkes whether file exists or not
//Parameters:
// fileName - file name
// fileDB - database connection
//Return:
// true - file found
// false - file not found
// file itself
func getFile(fileName string, fileDB *leveldb.DB) (bool, []byte, iterator.Iterator) {
var flag int = 0
var val []byte
iter := fileDB.NewIterator(nil, nil)
//doOperation([]byte(fileNm), nil, "delete", fileDB, wo)
for iter.Next() {
key := iter.Key()
if string(key) == fileName {
val = iter.Value()
flag = 1
break
}
}
if flag == 1 {
return true, val, iter
} else {
return false, nil, iter
}
}
示例14: clearItems
func clearItems(db *leveldb.DB) error {
snap, err := db.GetSnapshot()
if err != nil {
return err
}
defer snap.Release()
// Iterate from the start of k2 space to the end
it := snap.NewIterator(&util.Range{Start: []byte{2}, Limit: []byte{2, 0xff, 0xff, 0xff, 0xff}}, nil)
defer it.Release()
batch := &leveldb.Batch{}
for it.Next() {
k2 := it.Key()
k1 := it.Value()
// k1 should exist
_, err := snap.Get(k1, nil)
if err != nil {
return err
}
// Delete the k2 => k1 mapping first
batch.Delete(k2)
// Then the k1 => key mapping
batch.Delete(k1)
}
return db.Write(batch, nil)
}
示例15: dbRead
/*
/Read the DATABASE
/Read the Key and Value by Key
*/
func dbRead(dbObj *leveldb.DB, readDBKey []byte) []byte {
data, readError := dbObj.Get([]byte(readDBKey), nil)
if readError != nil {
fmt.Println("DB Read ERROR")
}
return data
}