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,31 +171,27 @@ func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
|
|||
if b == nil {
|
||||
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)
|
||||
return nil
|
||||
})
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 查询所有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 {
|
||||
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
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@ package boltdb
|
|||
|
||||
type Config struct {
|
||||
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