本文整理汇总了Golang中github.com/syndtr/goleveldb/leveldb.Batch.Delete方法的典型用法代码示例。如果您正苦于以下问题:Golang Batch.Delete方法的具体用法?Golang Batch.Delete怎么用?Golang Batch.Delete使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/syndtr/goleveldb/leveldb.Batch
的用法示例。
在下文中一共展示了Batch.Delete方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: SsPut
func (db *DB) SsPut(key, member []byte, score uint64) *skv.Reply {
batch := new(leveldb.Batch)
//
if prev := db.SsGet(key, member); prev.Status == skv.ReplyOK && prev.Uint64() != score {
batch.Delete(skv.SortSetsNsScoreKey(key, member, prev.Uint64()))
} else if prev.Status == skv.ReplyNotFound {
db.RawIncrby(skv.SortSetsNsLengthKey(key), 1)
}
//
batch.Put(skv.SortSetsNsScoreKey(key, member, score), []byte{})
//
batch.Put(skv.SortSetsNsEntryKey(key, member), []byte(strconv.FormatUint(score, 10)))
rpl := skv.NewReply("")
if err := db.ldb.Write(batch, nil); err != nil {
rpl.Status = err.Error()
}
return rpl
}
示例2: DeleteDataWithPrefix
// DeleteDataWithPrefix deletes all service data such as service metadata, items and payloads.
func (ds *LevelDBStorage) DeleteDataWithPrefix(prefix string) int {
ds.FlushCache()
ds.saveLock.Lock()
defer ds.saveLock.Unlock()
limitCounter := 0
total := 0
iter := ds.IterData(prefix)
wb := new(leveldb.Batch)
for iter.Valid() {
total++
if limitCounter < 1000 {
wb.Delete(iter.GetKey())
limitCounter++
} else {
limitCounter = 0
ds.db.Write(wb, nil)
wb.Reset()
}
iter.Next()
}
ds.db.Write(wb, nil)
return total
}
示例3: multiDeleteDb
func (self dbSync) multiDeleteDb(ks []string) {
batch := new(leveldb.Batch)
for _, k := range ks {
batch.Delete([]byte(k))
}
self.Db.Write(batch, nil)
}
示例4: Place
// Place notes the presence of a blob at a particular location.
func (d *DB) Place(ref, location, ct string, dependencies []string) (err error) {
b := new(leveldb.Batch)
// TODO(dichro): duplicates are interesting, but pretty rare,
// so probably not worth tracking?
b.Put(pack(found, ref), pack(location))
b.Put(pack(last), pack(location))
if ct != "" {
b.Put(pack(camliType, ct, ref), nil)
}
for _, dep := range dependencies {
b.Put(pack(parent, dep, ref), nil)
// TODO(dichro): should these always be looked up
// inline? Maybe a post-scan would be faster for bulk
// insert?
if ok, _ := d.db.Has(pack(found, dep), nil); !ok {
b.Put(pack(missing, dep, ref), nil)
}
}
it := d.db.NewIterator(&util.Range{
Start: pack(missing, ref, start),
Limit: pack(missing, ref, limit),
}, nil)
defer it.Release()
for it.Next() {
b.Delete(it.Key())
}
if err := it.Error(); err != nil {
fmt.Println(err)
}
err = d.db.Write(b, nil)
return
}
示例5: childFileIds
// childFileIds returns a map containing IDs of all Files that have parent
// refs to the given file. The returned map keys are IDs, and the map values
// indicate if the child is a directory.
func (d *DriveDB) childFileIds(fileId string) (map[string]bool, error) {
ids := make(map[string]bool)
d.iters.Add(1)
batch := new(leveldb.Batch)
iter := d.db.NewIterator(util.BytesPrefix(childKeyPrefix(fileId)), nil)
for iter.Next() {
pidcid := deKey(string(iter.Key()))
cid := pidcid[len(fileId)+1:]
if gdriveFile, err := d.FileById(cid); err != nil {
log.Printf("unknown fileId %v: %v", fileId, err)
batch.Delete(iter.Key())
} else {
ids[cid] = gdriveFile.MimeType == driveFolderMimeType
}
}
iter.Release()
d.iters.Done()
if batch.Len() > 0 {
err := d.db.Write(batch, nil)
if err != nil {
log.Printf("error writing to db: %v", err)
}
}
return ids, iter.Error()
}
示例6: Update
// Update block map state, removing any deleted or invalid files.
func (m *BlockMap) Update(files []protocol.FileInfo) error {
batch := new(leveldb.Batch)
buf := make([]byte, 4)
var key []byte
for _, file := range files {
if batch.Len() > maxBatchSize {
if err := m.db.Write(batch, nil); err != nil {
return err
}
batch.Reset()
}
if file.IsDirectory() {
continue
}
if file.IsDeleted() || file.IsInvalid() {
for _, block := range file.Blocks {
key = m.blockKeyInto(key, block.Hash, file.Name)
batch.Delete(key)
}
continue
}
for i, block := range file.Blocks {
binary.BigEndian.PutUint32(buf, uint32(i))
key = m.blockKeyInto(key, block.Hash, file.Name)
batch.Put(key, buf)
}
}
return m.db.Write(batch, nil)
}
示例7: _raw_ssttlat_put
func (db *DB) _raw_ssttlat_put(ns byte, key []byte, ttlat uint64) bool {
if ttlat == 0 {
return true
}
key = skv.RawNsKeyConcat(ns, key)
batch := new(leveldb.Batch)
//
if prev := db.RawGet(skv.RawTtlEntry(key)); prev.Status == skv.ReplyOK {
if prev_ttlat := dbutil.BytesToUint64(prev.Bytes()); prev_ttlat != ttlat {
batch.Delete(skv.RawTtlQueue(key, prev_ttlat))
}
}
//
batch.Put(skv.RawTtlQueue(key, ttlat), []byte{})
//
batch.Put(skv.RawTtlEntry(key), dbutil.Uint64ToBytes(ttlat))
if err := db.ldb.Write(batch, nil); err != nil {
return false
}
return true
}
示例8: ChildFileIds
// ChildFileIds returns the IDs of all Files that have parent refs to the given file.
func (d *DriveDB) ChildFileIds(fileId string) ([]string, error) {
var ids []string
d.iters.Add(1)
batch := new(leveldb.Batch)
iter := d.db.NewIterator(util.BytesPrefix(childKey(fileId)), nil)
for iter.Next() {
pidcid := deKey(string(iter.Key()))
cid := pidcid[len(fileId)+1:]
found, err := d.db.Has(fileKey(cid), nil)
if err == nil && found {
ids = append(ids, cid)
} else {
batch.Delete(iter.Key())
}
}
iter.Release()
d.iters.Done()
if batch.Len() > 0 {
err := d.db.Write(batch, nil)
if err != nil {
log.Printf("error writing to db: %v", err)
}
}
return ids, iter.Error()
}
示例9: DeleteData
func (ds *LevelDBStorage) DeleteData(id ...string) error {
wb := new(leveldb.Batch)
for _, i := range id {
wb.Delete(enc.UnsafeStringToBytes(i))
}
return ds.db.Write(wb, nil)
}
示例10: 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)
}
示例11: deleteMessages
func (server *Server) deleteMessages(uid *[32]byte, messageList []*[32]byte) error {
batch := new(leveldb.Batch)
for _, messageID := range messageList {
key := append(append([]byte{'m'}, uid[:]...), messageID[:]...)
batch.Delete(key)
}
return server.database.Write(batch, wO_sync)
}
示例12: Discard
// Discard block map state, removing the given files
func (m *BlockMap) Discard(files []protocol.FileInfo) error {
batch := new(leveldb.Batch)
for _, file := range files {
for _, block := range file.Blocks {
batch.Delete(m.blockKey(block.Hash, file.Name))
}
}
return m.db.Write(batch, nil)
}
示例13: Fix
// Fix repairs incorrect blockmap entries, removing the old entry and
// replacing it with a new entry for the given block
func (f *BlockFinder) Fix(folder, file string, index int32, oldHash, newHash []byte) error {
buf := make([]byte, 4)
binary.BigEndian.PutUint32(buf, uint32(index))
batch := new(leveldb.Batch)
batch.Delete(blockKeyInto(nil, oldHash, folder, file))
batch.Put(blockKeyInto(nil, newHash, folder, file), buf)
return f.db.Write(batch, nil)
}
示例14: delete
func (ldb *LevelDB) delete(keys [][]byte) {
batch := new(leveldb.Batch)
for _, key := range keys {
batch.Delete(key)
}
if err := ldb.db.Write(batch, nil); err != nil && err != leveldb.ErrNotFound {
panic(err)
}
}
示例15: makeBatchWithOps
func makeBatchWithOps(ops []AbstractBatchOperation) *leveldb.Batch {
batch := new(leveldb.Batch)
for _, op := range ops {
if op.kind == "PUT" {
batch.Put(op.key, op.value)
} else if op.kind == "DELETE" {
batch.Delete(op.key)
}
}
return batch
}