我们先看下面代码
1074 {
1075 mutex_.Unlock();
1076 // First look in the memtable, then in the immutable memtable (if any).
1077 LookupKey lkey(key, snapshot);
1078 if (mem->Get(lkey, value, &s)) {
1079 // Done
1080 } else if (imm != NULL && imm->Get(lkey, value, &s)) {
1081 // Done
1082 } else {
1083 s = current->Get(options, lkey, value, &stats);
1084 have_stat_update = true;
1085 }
1086 mutex_.Lock();
1087 }
从上面的代码可以看出,查询过程首先是在memTable不查找,如果找不到并且存在 immutable memtable,那么就在这里查找, 实在找不到,最后去ssTable中查找。
我们知道memTable 和immutable memTable都是使用跳表的结构实现,他们的查找就是在跳表中查找,这里就不介绍,我们主要来介绍下ssTable查找过程。
version_set.cc