我正在使用Go将键/值存储在levelDB数据库中。当我在LevelDB中插入新的键/值时,我检查了leveldbfile文件夹使用的磁盘空间,该空间先增加后减少。
➜ 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为什么要在什么基础上重新调整其磁盘空间?
答案 0 :(得分:1)
在数据库增长时,LevelDB在后台线程中压缩SST文件。由于这些文件是不可变的,因此可以通过创建新文件,然后删除旧文件来工作。因此,此“压缩”步骤需要(临时)额外的磁盘空间。