這裡主要介紹增刪改查的一些操作,可是這裡有一些奇怪的問題,比如資料過長時候灰產生的bug等等,這裡暫時不介紹,主要關注主要流程,具體引數等以後一一介紹。
先看增加,
db_->put(leveldb::writeoptions(),"love","life");
這個是增加,我們可以很簡單的找到是dbimp中的write()
函式實現了寫入操作,具體**如下:
status dbimpl::write(const writeoptions& options, writebatch* my_batch)
if (w.done)
// may temporarily unlock and wait.
status status = makeroomforwrite(my_batch ==
null); //
uint64_t last_sequence = versions_->lastsequence();
writer* last_writer =
&w; if (status.ok() && my_batch !=
null)
} //寫到log檔案中,
if (status.ok())
mutex_.lock();
if (sync_error)
}if (updates == tmp_batch_) tmp_batch_->clear();
versions_->setlastsequence(last_sequence);
}
這裡寫入操作為了實現非同步,也是費盡了心機,這裡稍加解釋,吧所有要寫入的內容寫入到乙個list中,等待前面沒內容或者這條內容已經寫入(其他執行緒給寫入了),就不在等待。makeroomforwrite()
這個其實內容挺多的,但是這裡寫入少量資料,基本不會出錯的,這裡就暫時不用搞出空間,開始真正的寫入,
log_->addrecord(writebatchinternal::contents(updates));
這個是寫入到log檔案中,其實也就是特定的乙個檔案,用來下次恢復內容,這裡設計有點奇怪,但是我也說不清楚,不想深入研究這個東東,寫入記憶體是
writebatchinternal::insertinto(updates, mem_);
status writebatchinternal::insertinto(const writebatch* b,
memtable* memtable)
status writebatch::iterate(handler* handler) const
virtual
void put(const slice& key, const slice& value)
void memtable::add(sequencenumber s, valuetype type,
const slice& key,
const slice& value)
typedef skiplistchar*, keycomparator> table;
table table_;
這裡廢了好大勁,就是這種,關於skiplist,到底是啥,這裡暫時不去介紹,我們現在預設他是乙個list即可。
status dbimpl::get(const readoptions& options,
const slice& key,
std::string* value)
關於membertable的get這裡暫時也不詳細介紹,主要流程大概就是這樣,所有的資料都儲存在mem_中
關於刪除
status db::delete(const writeoptions& opt, const slice& key)
virtual void delete(const slice& key)
這裡等了好久,終於讀完了dbimp的主要流程,發現又遇到乙個坑,這裡我們慢慢踩,這些**,我總有一天,可以啃完,以後可以慢慢分析一下指標和引用等一些知識, python 寫入資料
呼叫 open 時提供了兩個實參第乙個實參也是要開啟的檔案的名稱 第二個實參 w 告訴 python 我們要以 寫入模式 開啟這個檔案。開啟檔案時,可指定 讀取模式 r 寫入模式 w 附加模式 a 或讓你能夠讀取和寫入檔案的模式 r 如果你省略了模式實參,python 將以預設的唯讀模式開啟檔案。如...
hive 資料寫入
hive表中資料的寫入主要有 insert into overwrite values insert select load create table as select datatable 這幾種方式。其中hive從0.14版本開始支援 insert into table values line ...
寫入資料java將資料寫入到csv檔案
這兩天一直在查詢寫入資料之類的問題,下午正好有機會和大家討論一下.對於csv件文,因為要將資料分離的寫入到個一每單元格中。用什麼來開分以後單元格和下乙個單元格之間呢?這裡就用到了 逗號可以割分單元格。舉例說明 我們這裡用乙個輸出流將資料寫入到csv件文中 fileoutputstream fos n...