自动调整 levelDB 磁盘 space?
Auto adjusting levelDB disk space?
我正在使用 Go 将 keys/values 存储在 levelDB 数据库中。当我在 LevelDB 中插入新的 key/values 时,我检查了 leveldbfile 文件夹使用的磁盘 space,它在循环中增加然后减少。
➜ loomio git:(master) ✗ du -h leveldbfile
7.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.2M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.3M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
6.0M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.6M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
11M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
10M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.7M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.2M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.3M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
6.0M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.7M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.5M leveldbfile
存储邮箱的代码,用户密码是
func AddUser(dbSession config.Database, user *models.User) (string, error) {
user_id := uuid.NewV4()
user.UserID = user_id.String()
ok := RetreiveSecondaryIndex(dbSession, user.Email)
if ok {
log.Println("This is the user id found in secondary index", ok)
return "", errors.New("The email is already registered")
}
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network)
err := enc.Encode(user)
if err != nil {
log.Println("Error in encoding gob")
return "", err
}
err = dbSession.DBSession.Put([]byte(user.UserID), network.Bytes(), nil)
//dberr := userCollection.Insert(user)
fmt.Println(err)
if err != nil {
log.Println(err)
return "", err
}
AddSecondaryIndex(dbSession, user.Username, user.Email)
return user.UserID, nil
}
为什么 LevelDB 会重新调整其磁盘 space 以及基于什么?
LevelDB 在数据库增长时在后台线程中压缩 SST 文件。由于这些文件是不可变的,因此可以通过创建新文件然后删除旧文件来实现。因此,这个“压缩”步骤需要(暂时)额外的磁盘space。
我正在使用 Go 将 keys/values 存储在 levelDB 数据库中。当我在 LevelDB 中插入新的 key/values 时,我检查了 leveldbfile 文件夹使用的磁盘 space,它在循环中增加然后减少。
➜ loomio git:(master) ✗ du -h leveldbfile
7.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.2M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.3M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
6.0M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.6M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
11M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
10M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.7M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.2M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.3M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
6.0M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
3.7M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
1.4M leveldbfile
➜ loomio git:(master) ✗ du -h leveldbfile
8.5M leveldbfile
存储邮箱的代码,用户密码是
func AddUser(dbSession config.Database, user *models.User) (string, error) {
user_id := uuid.NewV4()
user.UserID = user_id.String()
ok := RetreiveSecondaryIndex(dbSession, user.Email)
if ok {
log.Println("This is the user id found in secondary index", ok)
return "", errors.New("The email is already registered")
}
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network)
err := enc.Encode(user)
if err != nil {
log.Println("Error in encoding gob")
return "", err
}
err = dbSession.DBSession.Put([]byte(user.UserID), network.Bytes(), nil)
//dberr := userCollection.Insert(user)
fmt.Println(err)
if err != nil {
log.Println(err)
return "", err
}
AddSecondaryIndex(dbSession, user.Username, user.Email)
return user.UserID, nil
}
为什么 LevelDB 会重新调整其磁盘 space 以及基于什么?
LevelDB 在数据库增长时在后台线程中压缩 SST 文件。由于这些文件是不可变的,因此可以通过创建新文件然后删除旧文件来实现。因此,这个“压缩”步骤需要(暂时)额外的磁盘space。