database - 自动调整 levelDB 磁盘空间?

标签 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 为什么要重新调整磁盘空间,依据是什么?

最佳答案

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

关于database - 自动调整 levelDB 磁盘空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515332/

相关文章:

mysql - 我是否应该将有关某个项目的信息放在与该项目的产品/parent_ID 不同的表中?数据库管理系统

database-design - 添加(或不添加)FK 以使 SELECT 更简单

database - 为共享计数器对数据库进行分区

php - 我可以使用同一个表中的 2 个外键构建 MySQL 数据库表吗?

go - 有没有办法约束(通用)类型参数?

从选项转到变量声明

java - 带有继承的类的 Hibernate 映射

java - 更新 SQL 数据库列

mysql - 在带有日期的 Sequelize 中使用 Op.between 时出现 TypeScript 错误

go - 在 Windows 上安装 gokogiri 时找不到错误 libxml2