校验和 - Checksums

校验和 - Checksums

leveldb会为所有存储在文件系统中的数据生成checksums。提供了两个参数来控制进行什么程度的checksums验证:

  • ReadOptions::verify_checksums,这个参数设置为ture代表了对从文件系统读取的所有数据进行强制的checksum验证。但默认情况下不会进行这样的强制验证。
  • Options::paranoid_checks,这个参数可以在打开数据库之前设置为ture,这会在打开数据库时只要检测到内部损坏的话引发错误。错误产生的时机取决与数据库出现问题的部分,可能在打开数据库时引发或者在后面执行到某些数据库操作时引发。在默认情况下是不执行检查的,即使数据库的持久化存储器某些部分出现问题也可以继续使用数据库。如果数据库坏了(也许是因为设置了paranoid_checks导致数据库无法打开),leveldb::RepairDB函数可以用来恢复尽可能多的数据。

近似大小 - Approximate Size

GetApproximateSizes方法可以用于获取一个或多个key range占用的文件系统空间的近似大小:

leveldb::Range ranges[2];
ranges[0] = leveldb::Range("a", "c");
ranges[1] = leveldb::Range("x", "z");
uint64_t sizes[2];
leveldb::Status s = db->GetApproximateSizes(ranges, 2, sizes);

上面的调用中会将size[0]设置为[a, c)范围内key占用的近似大小,而将size[1]设置为[x, z)范围内key占用的近似大小。

环境 - Environment

leveldb执行的所有文件操作(和其他操作系统的调用操作)都通过leveldb::Env对象统一管理。高级的客户端可以自己提供Env来实现更好的控制。例如,应用可以在文件IO中引入人为的延迟来限制leveldb对系统中其他活动的影响:

  class SlowEnv : public leveldb::Env {
    .. implementation of the Env interface ...
  };
  SlowEnv env;
  leveldb::Options options;
  options.env = &env;
  Status s = leveldb::DB::Open(options, ...);

移植 - Porting

leveldb通过提供leveldb/prot/port.h中的types/methods/functions的平台描述来实现将其移植到新的平台上。具体细节可以参考leveldb/prot/port_example.h