boltdb增加批量插入
parent
e5186c503d
commit
dac842f236
|
@ -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,10 +171,16 @@ 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)
|
||||||
rv = append(rv, v)
|
})
|
||||||
return nil
|
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
|
return
|
||||||
}
|
}
|
||||||
|
@ -170,19 +188,9 @@ func (cc *boltDB) GetList(bucketName string) (rv [][]byte, rer error) {
|
||||||
// 查询所有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 == "" {
|
rv[string(k)] = v
|
||||||
return
|
return nil
|
||||||
}
|
|
||||||
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
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
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
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package boltdb
|
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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue