boltdb增加批量插入
							parent
							
								
									e5186c503d
								
							
						
					
					
						commit
						dac842f236
					
				| 
						 | 
				
			
			@ -26,7 +26,11 @@ type boltDB struct {
 | 
			
		|||
func New(config ...Config) (db *boltDB) {
 | 
			
		||||
	cfg := configDefault(config...)
 | 
			
		||||
	db = &boltDB{}
 | 
			
		||||
	db.db, _ = bolt.Open(cfg.Name, 0600, &bolt.Options{Timeout: 1 * time.Second})
 | 
			
		||||
	db.db, _ = bolt.Open(cfg.Name, 0600, &bolt.Options{
 | 
			
		||||
		Timeout:    time.Duration(cfg.Timeout) * time.Second,
 | 
			
		||||
		NoGrowSync: cfg.NoGrowSync,
 | 
			
		||||
		ReadOnly:   cfg.ReadOnly,
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,33 +45,41 @@ func (cc *boltDB) Close() (rer error) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// 建表
 | 
			
		||||
func (cc *boltDB) CreateBucket(bucketName ...string) {
 | 
			
		||||
func (cc *boltDB) CreateBucket(bucketName ...string) (rer error) {
 | 
			
		||||
	if bucketName == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cc.db.Update(func(tx *bolt.Tx) error {
 | 
			
		||||
	rer = cc.db.Update(func(tx *bolt.Tx) error {
 | 
			
		||||
		var errs error
 | 
			
		||||
		for _, name := range bucketName {
 | 
			
		||||
			if name != "" {
 | 
			
		||||
				tx.CreateBucketIfNotExists([]byte(name))
 | 
			
		||||
				if _, err := tx.CreateBucketIfNotExists([]byte(name)); err != nil {
 | 
			
		||||
					errs = errors.Join(errs, err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
		return errs
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 删表
 | 
			
		||||
func (cc *boltDB) DeleteBucket(bucketName ...string) {
 | 
			
		||||
func (cc *boltDB) DeleteBucket(bucketName ...string) (rer error) {
 | 
			
		||||
	if bucketName == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cc.db.Update(func(tx *bolt.Tx) error {
 | 
			
		||||
	rer = cc.db.Update(func(tx *bolt.Tx) error {
 | 
			
		||||
		var errs error
 | 
			
		||||
		for _, name := range bucketName {
 | 
			
		||||
			if name != "" {
 | 
			
		||||
				tx.DeleteBucket([]byte(name))
 | 
			
		||||
				if err := tx.DeleteBucket([]byte(name)); err != nil {
 | 
			
		||||
					errs = errors.Join(errs, err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
		return errs
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 保存
 | 
			
		||||
| 
						 | 
				
			
			@ -148,8 +160,8 @@ func (cc *boltDB) Delete(bucketName, key string) (rer error) {
 | 
			
		|||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 查询所有list
 | 
			
		||||
func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
 | 
			
		||||
// 自定义遍历
 | 
			
		||||
func (cc *boltDB) ForEach(bucketName string, fn func(k, v []byte) error) (rer error) {
 | 
			
		||||
	rer = ErrBucketInvalid
 | 
			
		||||
	if bucketName == "" {
 | 
			
		||||
		return
 | 
			
		||||
| 
						 | 
				
			
			@ -159,10 +171,16 @@ func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
 | 
			
		|||
		if b == nil {
 | 
			
		||||
			return ErrBucketNotFound
 | 
			
		||||
		}
 | 
			
		||||
		return b.ForEach(func(k, v []byte) error {
 | 
			
		||||
			rv = append(rv, v)
 | 
			
		||||
			return nil
 | 
			
		||||
		})
 | 
			
		||||
		return b.ForEach(fn)
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 查询所有list
 | 
			
		||||
func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
 | 
			
		||||
	rer = cc.ForEach(bucketName, func(k, v []byte) error {
 | 
			
		||||
		rv = append(rv, v)
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -170,19 +188,9 @@ func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
 | 
			
		|||
// 查询所有map
 | 
			
		||||
func (cc *boltDB) GetMap(bucketName string) (rv map[string][]byte, rer error) {
 | 
			
		||||
	rv = make(map[string][]byte)
 | 
			
		||||
	rer = ErrBucketInvalid
 | 
			
		||||
	if bucketName == "" {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	rer = cc.db.View(func(tx *bolt.Tx) error {
 | 
			
		||||
		b := tx.Bucket([]byte(bucketName))
 | 
			
		||||
		if b == nil {
 | 
			
		||||
			return ErrBucketNotFound
 | 
			
		||||
		}
 | 
			
		||||
		return b.ForEach(func(k, v []byte) error {
 | 
			
		||||
			rv[string(k)] = v
 | 
			
		||||
			return nil
 | 
			
		||||
		})
 | 
			
		||||
	rer = cc.ForEach(bucketName, func(k, v []byte) error {
 | 
			
		||||
		rv[string(k)] = v
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -341,3 +349,30 @@ func (cc *boltDB) ScanRangeMap(bucketName, start, end string) (rv map[string][]b
 | 
			
		|||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 批处理插入
 | 
			
		||||
func (cc *boltDB) BatchSet(bucketName string, value map[string][]byte) (rer error) {
 | 
			
		||||
	rer = ErrBucketInvalid
 | 
			
		||||
	if bucketName == "" {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	rer = cc.db.Batch(func(tx *bolt.Tx) error {
 | 
			
		||||
		b := tx.Bucket([]byte(bucketName))
 | 
			
		||||
		if b == nil {
 | 
			
		||||
			return ErrBucketNotFound
 | 
			
		||||
		}
 | 
			
		||||
		for k, v := range value {
 | 
			
		||||
			if k == "" {
 | 
			
		||||
				return ErrKeyInvalid
 | 
			
		||||
			}
 | 
			
		||||
			if value == nil {
 | 
			
		||||
				return ErrValueInvalid
 | 
			
		||||
			}
 | 
			
		||||
			if err := b.Put([]byte(k), v); err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,10 @@
 | 
			
		|||
package boltdb
 | 
			
		||||
 | 
			
		||||
type Config struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	Name       string
 | 
			
		||||
	Timeout    uint64
 | 
			
		||||
	NoGrowSync bool
 | 
			
		||||
	ReadOnly   bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var cfg_default = Config{
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +20,5 @@ func configDefault(config ...Config) Config {
 | 
			
		|||
	if cfg.Name == "" {
 | 
			
		||||
		cfg.Name = cfg_default.Name
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return cfg
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue