当前位置: 首页>>代码示例>>Golang>>正文


Golang Tx.CreateBucket方法代码示例

本文整理汇总了Golang中github.com/boltdb/bolt.Tx.CreateBucket方法的典型用法代码示例。如果您正苦于以下问题:Golang Tx.CreateBucket方法的具体用法?Golang Tx.CreateBucket怎么用?Golang Tx.CreateBucket使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在github.com/boltdb/bolt.Tx的用法示例。


在下文中一共展示了Tx.CreateBucket方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: createDSCOBucket

// createDSCOBucket creates a bucket for the delayed siacoin outputs at the
// input height.
func createDSCOBucket(tx *bolt.Tx, bh types.BlockHeight) {
	bucketID := append(prefixDSCO, encoding.Marshal(bh)...)
	_, err := tx.CreateBucket(bucketID)
	if build.DEBUG && err != nil {
		panic(err)
	}
}
开发者ID:zoutaiqi,项目名称:Sia,代码行数:9,代码来源:database.go

示例2: simulatePutHandler

// Inserts a key into the database.
func simulatePutHandler(tx *bolt.Tx, qdb *QuickDB) {
	var err error
	keys, value := randKeys(), randValue()

	// Retrieve root bucket.
	b := tx.Bucket(keys[0])
	if b == nil {
		b, err = tx.CreateBucket(keys[0])
		if err != nil {
			panic("create bucket: " + err.Error())
		}
	}

	// Create nested buckets, if necessary.
	for _, key := range keys[1 : len(keys)-1] {
		child := b.Bucket(key)
		if child != nil {
			b = child
		} else {
			b, err = b.CreateBucket(key)
			if err != nil {
				panic("create bucket: " + err.Error())
			}
		}
	}

	// Insert into database.
	if err := b.Put(keys[len(keys)-1], value); err != nil {
		panic("put: " + err.Error())
	}

	// Insert into in-memory database.
	qdb.Put(keys, value)
}
开发者ID:TrevorSStone,项目名称:bolt,代码行数:35,代码来源:simulation_test.go

示例3: createDSCOBucket

// createDSCOBucket creates a bucket for the delayed siacoin outputs at the
// input height.
func createDSCOBucket(tx *bolt.Tx, bh types.BlockHeight) error {
	bucketID := append(prefix_dsco, encoding.Marshal(bh)...)
	dscoBuckets := tx.Bucket(DSCOBuckets)
	err := dscoBuckets.Put(encoding.Marshal(bh), encoding.Marshal(bucketID))
	if err != nil {
		panic(err)
	}
	_, err = tx.CreateBucket(bucketID)
	return err
}
开发者ID:Butterfly-3Kisses,项目名称:Sia,代码行数:12,代码来源:database.go

示例4: createGadget

func (g *Gadget) createGadget(tx *bolt.Tx) error {
	g.Id = gogadgets.GetUUID()
	b, err := tx.CreateBucket([]byte(g.Id))
	if err != nil {
		return err
	}
	if _, err := b.CreateBucket(_notes); err != nil {
		return err
	}
	_, err = b.CreateBucket(_stats)
	return err
}
开发者ID:cswank,项目名称:quimby,代码行数:12,代码来源:gadget.go

示例5: saveRedirect

func (bl *boltLoader) saveRedirect(tx *bolt.Tx, redirect Redirect) error {
	bucket, err := tx.CreateBucket([]byte(redirect.Source))
	if err != nil {
		return err
	}

	err = bucket.Put([]byte(redirect.Target), []byte{})
	if err != nil {
		return err
	}

	return nil
}
开发者ID:kbuzsaki,项目名称:wikidegree,代码行数:13,代码来源:apibolt.go

示例6: BoltInsertArticles

// Insert one wikimedia dump file at a time, the db file is named "[a-z]-[az]*", the regexp's are the letter of the 1st and last article in the dump file (get that in the main func)
func BoltInsertArticles(tx *bolt.Tx, articles map[string]PageItems) (err error) {
	for key, _ := range articles {
		b, err := tx.CreateBucket([]byte(key))
		if err != nil {
			return err
		}
		// Puts the name of the articles sections and section content into the bolt bucket, so the TX's bucket name is the article name, and TX's bucket content's key is the article's sections, pagerank, links and so forth (see type article struct for full content).
		for sectionKey, sectionText := range articles[key].Sections {
			if err := b.Put([]byte(sectionKey), []byte(sectionText)); err != nil {
				return err
			}
		}
	}
	return nil
}
开发者ID:pressure679,项目名称:WikiPagerankDB,代码行数:16,代码来源:sample.go

示例7: savePage

func (bl *boltLoader) savePage(tx *bolt.Tx, page Page) error {
	bucket, err := tx.CreateBucket([]byte(page.Title))
	if err != nil {
		return err
	}

	for _, link := range page.Links {
		err = bucket.Put([]byte(link), []byte{})
		if err != nil {
			return err
		}
	}

	return nil
}
开发者ID:kbuzsaki,项目名称:wikidegree,代码行数:15,代码来源:apibolt.go

示例8: refreshDB

// refreshDB saves, deletes, and then restores all of the buckets in the
// database. This eliminates bugs during reorgs. The exact source of the bugs
// is unknown, but the problem is that after excessive use by Sia, calling
// Delete on a bucket will occasionally delete many more elements than the
// single element being targeted. It is strongly suspected that this is due to
// an error in the boltdb code, but the source remains unknown for the time
// being. Refreshing the database between blocks has solved the issue for the
// time being - it is currently unknown whether large blocks are able to
// trigger the error, but it is suspected that large blocks are safe.
func refreshDB(tx *bolt.Tx) {
	// Get a list of buckets.
	var bucketNames [][]byte
	err := tx.ForEach(func(bucketName []byte, _ *bolt.Bucket) error {
		bucketNames = append(bucketNames, bucketName)
		return nil
	})
	if err != nil {
		manageErr(tx, err)
	}

	for _, bucketName := range bucketNames {
		var keys [][]byte
		var values [][]byte
		err := tx.Bucket(bucketName).ForEach(func(k, v []byte) error {
			keys = append(keys, k)
			values = append(values, v)
			return nil
		})
		if err != nil {
			manageErr(tx, err)
		}

		err = tx.DeleteBucket(bucketName)
		if err != nil {
			manageErr(tx, err)
		}
		bucket, err := tx.CreateBucket(bucketName)
		if err != nil {
			manageErr(tx, err)
		}
		for i := range keys {
			err := bucket.Put(keys[i], values[i])
			if err != nil {
				manageErr(tx, err)
			}
		}
	}
}
开发者ID:zoutaiqi,项目名称:Sia,代码行数:48,代码来源:consistency.go

示例9: Put

func Put(tx *bolt.Tx, bucket []byte, keys [][]byte, data []byte) error {
	var err error
	var buf []byte
	var b *bolt.Bucket
	b, err = tx.CreateBucketIfNotExists(bucket)
	if err != nil {
		return e.Forward(err)
	}
	if len(keys) == 0 {
		return e.New("no keys")
	}
	if len(keys) >= 2 {
		for i := 0; i < len(keys)-1; i++ {
			buf = b.Get(keys[i])
			if buf == nil {
				id, err := rand.Uuid()
				if err != nil {
					return e.Forward(err)
				}
				buf = []byte(id)
				err = b.Put(keys[i], buf)
				if err != nil {
					return e.Forward(err)
				}
			}
			b, err = tx.CreateBucket(buf)
			if e.Contains(err, "bucket already exists") {
				b = tx.Bucket(buf)
			} else if err != nil {
				return e.Forward(err)
			}
		}
	}
	err = b.Put(keys[len(keys)-1], data)
	if err != nil {
		return e.Forward(err)
	}
	return nil
}
开发者ID:fcavani,项目名称:boltdbutils,代码行数:39,代码来源:index.go

示例10: initDB

// initDatabase is run when the database. This has become the true
// init function for consensus set
func (cs *ConsensusSet) initDB(tx *bolt.Tx) error {
	// Enumerate the database buckets.
	buckets := [][]byte{
		BlockHeight,
		BlockMap,
		BlockPath,
		Consistency,
		SiacoinOutputs,
		FileContracts,
		SiafundOutputs,
		SiafundPool,
	}

	// Create the database buckets.
	for _, bucket := range buckets {
		_, err := tx.CreateBucket(bucket)
		if err != nil {
			return err
		}
	}

	// Place a 'false' in the consistency bucket to indicate that no
	// inconsistencies have been found.
	err := tx.Bucket(Consistency).Put(Consistency, encoding.Marshal(false))
	if err != nil {
		return err
	}

	// Set the block height to -1, so the genesis block is at height 0.
	blockHeight := tx.Bucket(BlockHeight)
	underflow := types.BlockHeight(0)
	err = blockHeight.Put(BlockHeight, encoding.Marshal(underflow-1))
	if err != nil {
		return err
	}

	// Set the siafund pool to 0.
	setSiafundPool(tx, types.NewCurrency64(0))

	// Update the siafund output diffs map for the genesis block on disk. This
	// needs to happen between the database being opened/initilized and the
	// consensus set hash being calculated
	for _, sfod := range cs.blockRoot.SiafundOutputDiffs {
		commitSiafundOutputDiff(tx, sfod, modules.DiffApply)
	}

	// Add the miner payout from the genesis block to the delayed siacoin
	// outputs - unspendable, as the unlock hash is blank.
	createDSCOBucket(tx, types.MaturityDelay)
	addDSCO(tx, types.MaturityDelay, cs.blockRoot.Block.MinerPayoutID(0), types.SiacoinOutput{
		Value:      types.CalculateCoinbase(0),
		UnlockHash: types.UnlockHash{},
	})

	// Add the genesis block to the block strucutres - checksum must be taken
	// after pushing the genesis block into the path.
	pushPath(tx, cs.blockRoot.Block.ID())
	if build.DEBUG {
		cs.blockRoot.ConsensusChecksum = consensusChecksum(tx)
	}
	addBlockMap(tx, &cs.blockRoot)
	return nil
}
开发者ID:zoutaiqi,项目名称:Sia,代码行数:65,代码来源:database.go

示例11: store

func store(tx *bolt.Tx, img Image, hash []byte) error {
	bimg := tx.Bucket([]byte(images))
	bhits := tx.Bucket([]byte(hits))

	buf, err := encImg(img)
	if err != nil {
		return e.Forward(err)
	}

	rect, err := img.Bounds()
	if err != nil {
		return e.Forward(err)
	}

	width := uint(rect.Max.X - rect.Min.X)
	height := uint(rect.Max.Y - rect.Min.Y)

	bufw := encLength(uint64(width))
	bufh := encLength(uint64(height))

	bucketw := append(hash, bufw...)
	bucketh := append(bucketw, bufh...)

	hitshash := []byte(string(hash) + string(bufw) + string(bufh))
	bufhits := encHits(0)

	err = bhits.Put(hitshash, bufhits)
	if err != nil {
		return e.Forward(err)
	}

	w := bimg.Get(hash)
	if w == nil {
		err = bimg.Put(hash, bufw)
		if err != nil {
			return e.Forward(err)
		}
		bw, err := tx.CreateBucket(bucketw)
		if err != nil {
			return e.Forward(err)
		}
		err = bw.Put(bufw, bufh)
		if err != nil {
			return e.Forward(err)
		}
		bh, err := tx.CreateBucket(bucketh)
		if err != nil {
			return e.Forward(err)
		}
		err = bh.Put(bufh, buf)
		if err != nil {
			return e.Forward(err)
		}
		return nil
	}

	bw := tx.Bucket(append(hash, w...))
	h := bw.Get(bufw)
	if h == nil {
		err = bw.Put(bufw, bufh)
		if err != nil {
			return e.Forward(err)
		}
		bh, err := tx.CreateBucket(bucketh)
		if err != nil {
			return e.Forward(err)
		}
		err = bh.Put(bufh, buf)
		if err != nil {
			return e.Forward(err)
		}
		return nil
	}

	bh := tx.Bucket([]byte(string(hash) + string(w) + string(h)))
	err = bh.Put(bufh, buf)
	if err != nil {
		return e.Forward(err)
	}

	return nil
}
开发者ID:fcavani,项目名称:image,代码行数:82,代码来源:cache-disk.go


注:本文中的github.com/boltdb/bolt.Tx.CreateBucket方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。