自动调整levelDB磁盘空间吗?

时间:2019-02-04 11:39:38

标签: database go database-design leveldb

我正在使用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为什么要在什么基础上重新调整其磁盘空间?

1 个答案:

答案 0 :(得分:1)

在数据库增长时,LevelDB在后台线程中压缩SST文件。由于这些文件是不可变的,因此可以通过创建新文件,然后删除旧文件来工作。因此,此“压缩”步骤需要(临时)额外的磁盘空间。