Browse Source

modify report.md

master
王雪飞 8 months ago
parent
commit
4670db006e
3 changed files with 31 additions and 8 deletions
  1. +10
    -5
      db/db_impl.cc
  2. +2
    -2
      db/db_impl.h
  3. +19
    -1
      report.md

+ 10
- 5
db/db_impl.cc View File

@ -146,12 +146,14 @@ DBImpl::DBImpl(const Options& raw_options, const std::string& dbname)
tmp_batch_(new WriteBatch),
background_compaction_scheduled_(false),
manual_compaction_(nullptr),
// TODO(begin)
versions_(new VersionSet(dbname_, &options_, table_cache_,
&internal_comparator_)),
slot_page_(new SlotPage(dbname)) {
vlog_set_ = new VlogSet(dbname, nullptr);
vlog_set_->set_vlog_gc(new VlogGC(slot_page_, vlog_set_));
// TODO(end)
}
DBImpl::~DBImpl() {
@ -181,9 +183,10 @@ DBImpl::~DBImpl() {
if (owns_cache_) {
delete options_.block_cache;
}
// TODO(begin)
delete slot_page_;
delete vlog_set_;
// TODO(end)
}
Status DBImpl::NewDB() {
@ -1174,14 +1177,14 @@ Status DBImpl::Get(const ReadOptions& options, const Slice& key,
if (imm != nullptr) imm->Unref();
current->Unref();
// TODO: search the slotpage and get value from vlog
// TODO(begin): search the slotpage and get value from vlog
size_t slot_num = *(size_t *)value->c_str();
struct slot_content sc;
std::string vlog_value;
slot_page_->get_slot(slot_num, &sc);
vlog_set_->get_value(sc.vlog_num, sc.value_offset, &vlog_value);
*value = vlog_value;
// TODO(end)
return s;
}
@ -1216,7 +1219,7 @@ void DBImpl::ReleaseSnapshot(const Snapshot* snapshot) {
// Convenience methods
Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) {
// TODO: allocate slot_num in slotpage and put value in vlog
// TODO(begin): allocate slot_num in slotpage and put value in vlog
size_t slot_num = slot_page_->alloc_slot();
struct slot_content sc;
@ -1228,9 +1231,11 @@ Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) {
Slice slot_val(data, sizeof(data));
return DB::Put(o, key, slot_val);
// TODO(end)
}
Status DBImpl::Delete(const WriteOptions& options, const Slice& key) {
// TODO(begin)
// size_t slot_num = *(size_t *)value->c_str();
// struct slot_content sc;
// std::string vlog_value;
@ -1248,7 +1253,7 @@ Status DBImpl::Delete(const WriteOptions& options, const Slice& key) {
std::string vlog_value;
slot_page_->get_slot(slot_num, &sc);
vlog_set_->del_value(sc.vlog_num, sc.value_offset);
// TODO(end)
return DB::Delete(options, key);
}

+ 2
- 2
db/db_impl.h View File

@ -78,10 +78,10 @@ class DBImpl : public DB {
friend class DB;
struct CompactionState;
struct Writer;
// TODO(begin)
SlotPage *slot_page_;
VlogSet *vlog_set_;
// TODO(end)
// Information for a manual compaction
struct ManualCompaction {
int level;

+ 19
- 1
report.md View File

@ -61,7 +61,25 @@
3. slot_page文件和vlog文件的GC
对于vlog文件,我们在内存中维护一个bitmap,用来表示每一个slot的使用情况,并在插入和GC删除kv时进行动态的分配和释放。对于vlog文件的GC,我们用一个后台线程来扫描所有vlog的discard计数器。当某些vlog的discard计数器超过某个阈值(比如1024),我们就对这些vlog文件进行GC过程,当GC完成之后将slot_page中的slot元数据进行更新,再将原来的vlog文件进行删除,GC过程就完成了。
##### 2.2.1 相关代码文件
- [`/db/db_impl.cc`](./db/db_impl.cc)
- [`/db/db_impl.h`](./db/db_impl.h)
-
- [`/db/shared_lock.h`](./db/shared_lock.h) 定义了一个 SharedLock 类,用于实现读写锁机制,包含四种操作:soft_lock():获取共享读锁,确保在没有写操作时允许多个读操作并发进行;soft_unlock():释放共享读锁;hard_lock():获取独占写锁,确保只有当没有其他读写操作时,允许写入操作进行;hard_unlock():释放独占写锁。
- [`/db/slotpage.h`](./db/slotpage.h)
- [`/db/threadpool.h`](./db/threadpool.h)
- [`/db/vlog.h`](./db/vlog.h)
- [`/db/vlog_gc.cpp`](./db/vlog_gc.cpp)
- [`/db/vlog_gc.h`](./db/vlog_gc.h)
- [`/db/vlog_set.cpp`](./db/vlog_set.cpp)
- [`/db/vlog_set.h`](./db/vlog_set.h)
-
- [`/test/db_test3.cc`](./test/db_test3.cc):测试 value 的字段功能
- [`/test/db_test4.cc`](./test/db_test4.cc)
- [`/test/db_test5.cc`](./test/db_test5.cc)
-
- [`CMakeLists.txt`](CMakeLists.txt):添加可执行文件
### 锁机制
### 3. 数据结构设计
`key的格式:| key | slot_num | `

Loading…
Cancel
Save