boltdb增加批量插入

main
cc 2024-07-21 14:39:52 +00:00
parent e5186c503d
commit dac842f236
2 changed files with 67 additions and 30 deletions

View File

@ -26,7 +26,11 @@ type boltDB struct {
func New(config ...Config) (db *boltDB) { func New(config ...Config) (db *boltDB) {
cfg := configDefault(config...) cfg := configDefault(config...)
db = &boltDB{} 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 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 { if bucketName == nil {
return 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 { for _, name := range bucketName {
if name != "" { 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 { if bucketName == nil {
return 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 { for _, name := range bucketName {
if name != "" { 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 rer = ErrBucketInvalid
if bucketName == "" { if bucketName == "" {
return return
@ -159,31 +171,27 @@ func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
if b == nil { if b == nil {
return ErrBucketNotFound return ErrBucketNotFound
} }
return b.ForEach(func(k, v []byte) error { 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) rv = append(rv, v)
return nil return nil
}) })
})
return return
} }
// 查询所有map // 查询所有map
func (cc *boltDB) GetMap(bucketName string) (rv map[string][]byte, rer error) { func (cc *boltDB) GetMap(bucketName string) (rv map[string][]byte, rer error) {
rv = make(map[string][]byte) rv = make(map[string][]byte)
rer = ErrBucketInvalid rer = cc.ForEach(bucketName, func(k, v []byte) error {
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 rv[string(k)] = v
return nil return nil
}) })
})
return return
} }
@ -341,3 +349,30 @@ func (cc *boltDB) ScanRangeMap(bucketName, start, end string) (rv map[string][]b
}) })
return 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
}

View File

@ -2,6 +2,9 @@ package boltdb
type Config struct { type Config struct {
Name string Name string
Timeout uint64
NoGrowSync bool
ReadOnly bool
} }
var cfg_default = Config{ var cfg_default = Config{
@ -17,6 +20,5 @@ func configDefault(config ...Config) Config {
if cfg.Name == "" { if cfg.Name == "" {
cfg.Name = cfg_default.Name cfg.Name = cfg_default.Name
} }
return cfg return cfg
} }