本文整理汇总了Golang中github.com/syndtr/goleveldb/leveldb.Batch.Put方法的典型用法代码示例。如果您正苦于以下问题:Golang Batch.Put方法的具体用法?Golang Batch.Put怎么用?Golang Batch.Put使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/syndtr/goleveldb/leveldb.Batch
的用法示例。
在下文中一共展示了Batch.Put方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: PersistReceivedRecords
// PersistReceivedRecords save the info about which records we've already seen
func (p *LevelDBPersister) PersistReceivedRecords(comp StreamID, records []*Record) error {
batch := new(leveldb.Batch)
for _, r := range records {
batch.Put([]byte(fmt.Sprintf(receivedKeyFormat, comp, r.ID)), nil)
}
return p.db.Write(batch, nil)
}
示例2: msetnx
func msetnx(v resp.CommandArgs, ex *CommandExtras) error {
if len(v) == 0 || len(v)%2 != 0 {
return resp.NewError(ErrFmtWrongNumberArgument, "msetnx").WriteTo(ex.Buffer)
}
batch := new(leveldb.Batch)
for i := 0; i < len(v); {
batch.Put(v[i], v[i+1])
i += 2
}
ex.DB.Lock()
defer ex.DB.Unlock()
for i := 0; i < len(v); {
_, err := ex.DB.Get(v[i])
if err != nil && err != leveldb.ErrNotFound {
return err
}
if err != leveldb.ErrNotFound {
return resp.ZeroInteger.WriteTo(ex.Buffer)
}
i += 2
}
if err := ex.DB.WriteBatch(batch); err != nil {
return err
}
return resp.OneInteger.WriteTo(ex.Buffer)
}
示例3: 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
}
示例4: PutReceipts
// PutReceipts stores the receipts in the current database
func PutReceipts(db common.Database, receipts types.Receipts) error {
batch := new(leveldb.Batch)
_, batchWrite := db.(*ethdb.LDBDatabase)
for _, receipt := range receipts {
storageReceipt := (*types.ReceiptForStorage)(receipt)
bytes, err := rlp.EncodeToBytes(storageReceipt)
if err != nil {
return err
}
if batchWrite {
batch.Put(append(receiptsPre, receipt.TxHash[:]...), bytes)
} else {
err = db.Put(append(receiptsPre, receipt.TxHash[:]...), bytes)
if err != nil {
return err
}
}
}
if db, ok := db.(*ethdb.LDBDatabase); ok {
if err := db.LDB().Write(batch, nil); err != nil {
return err
}
}
return nil
}
示例5: Put
func (l *LevelDb) Put(id DbKey, aliases []DbKey, value []byte) error {
// Lazy Open
if err := l.open(); err != nil {
return err
}
batch := new(leveldb.Batch)
idb := id.ToBytes("kv")
batch.Put(idb, value)
if aliases != nil {
for _, alias := range aliases {
batch.Put(alias.ToBytes("lo"), idb)
}
}
err := l.db.Write(batch, nil)
// If the file is corrupt, just nuke and act like we didn't find anything
if l.nukeIfCorrupt(err) {
err = nil
}
return err
}
示例6: saveInDb
func (self dbSync) saveInDb(mult map[string]string) {
batch := new(leveldb.Batch)
for k, v := range mult {
batch.Put([]byte(k), []byte(v))
}
self.Db.Write(batch, nil)
}
示例7: 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
}
示例8: _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
}
示例9: 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)
}
示例10: ldbCheckGlobals
func ldbCheckGlobals(db *leveldb.DB, folder []byte) {
defer runtime.GC()
snap, err := db.GetSnapshot()
if err != nil {
panic(err)
}
l.Debugf("created snapshot %p", snap)
defer func() {
l.Debugf("close snapshot %p", snap)
snap.Release()
}()
start := globalKey(folder, nil)
limit := globalKey(folder, []byte{0xff, 0xff, 0xff, 0xff})
dbi := snap.NewIterator(&util.Range{Start: start, Limit: limit}, nil)
defer dbi.Release()
batch := new(leveldb.Batch)
l.Debugf("new batch %p", batch)
var fk []byte
for dbi.Next() {
gk := dbi.Key()
var vl versionList
err := vl.UnmarshalXDR(dbi.Value())
if err != nil {
panic(err)
}
// Check the global version list for consistency. An issue in previous
// versions of goleveldb could result in reordered writes so that
// there are global entries pointing to no longer existing files. Here
// we find those and clear them out.
name := globalKeyName(gk)
var newVL versionList
for _, version := range vl.versions {
fk = deviceKeyInto(fk[:cap(fk)], folder, version.device, name)
l.Debugf("snap.Get %p %x", snap, fk)
_, err := snap.Get(fk, nil)
if err == leveldb.ErrNotFound {
continue
}
if err != nil {
panic(err)
}
newVL.versions = append(newVL.versions, version)
}
if len(newVL.versions) != len(vl.versions) {
l.Infof("db repair: rewriting global version list for %x %x", gk[1:1+64], gk[1+64:])
batch.Put(dbi.Key(), newVL.MustMarshalXDR())
}
}
l.Debugf("db check completed for %q", folder)
db.Write(batch, nil)
}
示例11: newKeys
func (server *Server) newKeys(uid *[32]byte, keyList [][]byte) error {
batch := new(leveldb.Batch)
for _, key := range keyList {
keyHash := sha256.Sum256(key)
dbKey := append(append([]byte{'k'}, uid[:]...), keyHash[:]...)
batch.Put(dbKey, key)
}
return server.database.Write(batch, wO_sync)
}
示例12: 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)
}
示例13: main
func main() {
olddb, err := Open(os.Args[1])
if err != nil {
panic(err)
}
newdb, err := Open(os.Args[2])
if err != nil {
panic(err)
}
iter := olddb.NewIterator(&util.Range{Start: nil, Limit: nil}, nil)
totalBitset := 0
totalMsgpack := 0
rows := 0
var batch *leveldb.Batch
batch = new(leveldb.Batch)
for iter.Next() {
key := iter.Key()
value := iter.Value()
if bytes.HasPrefix(key, []byte("doc:")) {
batch.Put(key, value)
continue
}
bs := bitset.New(8)
bs.ReadFrom(bytes.NewBuffer(value))
var docIDs []uint
for i, e := bs.NextSet(0); e; i, e = bs.NextSet(i + 1) {
docIDs = append(docIDs, i)
}
b, err := msgpack.Marshal(delta_encode(docIDs))
if err != nil {
panic(err)
}
//fmt.Printf("bitset size is %d\n", len(value))
//fmt.Printf("msgpack size is %d\n", len(b))
totalBitset += len(value)
totalMsgpack += len(b)
batch.Put(key, b)
if rows%10000 == 0 {
log.Print("rows ", rows)
newdb.Write(batch, nil)
batch = new(leveldb.Batch)
}
rows++
}
fmt.Printf("bitset size is %d\n", totalBitset)
fmt.Printf("msgpack size is %d\n", totalMsgpack)
newdb.Write(batch, nil)
newdb.CompactRange(util.Range{Start: nil, Limit: nil})
}
示例14: 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
}
示例15: PutMany
func (l *LevelDBStore) PutMany(chunks []Chunk) (e BackpressureError) {
numBytes := 0
b := new(leveldb.Batch)
for _, c := range chunks {
data := snappy.Encode(nil, c.Data())
numBytes += len(data)
b.Put(l.toChunkKey(c.Hash()), data)
}
l.putBatch(b, numBytes)
return
}