??Checkpoint是RocksDB的一個(gè)feature,主要支持對(duì)當(dāng)前正在運(yùn)行的數(shù)據(jù)庫(kù)制作一個(gè)snapshot鳞骤。Checkpoints是一個(gè)時(shí)間點(diǎn)上的snapshot。當(dāng)使用Read-only模式打開的話,可以支持查詢這個(gè)時(shí)間點(diǎn)上的數(shù)據(jù)早像,當(dāng)使用Read-Write模式打開的話,可以作為一個(gè)可寫的snapshot肖爵。Checkpoints可以作為全量或者新增備份的backup使用卢鹦。
??給定一個(gè)RocksDB數(shù)據(jù)庫(kù),Checkpoint功能可以創(chuàng)建一個(gè)滿足數(shù)據(jù)一致性的快照劝堪。如果snapshot所在的文件系統(tǒng)和DB file所在的文件系統(tǒng)相同的話冀自,SST files會(huì)被硬鏈接,否則秒啦,就要全部拷貝過(guò)去熬粗,manifest和CURRENT files也會(huì)被拷貝過(guò)去。另外帝蒿,如果有多個(gè)列族的話荐糜,在checkpoint的start和end時(shí)間段內(nèi)的log文件也會(huì)被拷貝過(guò)去,這么做的目的是提供所有列族數(shù)據(jù)的一致性snapshot葛超。
??在創(chuàng)建checkpoints之前暴氏,需要?jiǎng)?chuàng)建一個(gè)checkpoint對(duì)象。
Status Create(DB* db, Checkpoint** checkpoint_ptr);
??給定一個(gè)checkpoint對(duì)象和目錄绣张,CreateCheckpoint 函數(shù)會(huì)在給定目錄中創(chuàng)建數(shù)據(jù)庫(kù)的滿足數(shù)據(jù)一致性的snapshot答渔。
Status CreateCheckpoint(const std::string& checkpoint_dir);
??函數(shù)參數(shù)中的目錄不應(yīng)該存在,這個(gè)目錄會(huì)在函數(shù)中創(chuàng)建侥涵,另外沼撕,目錄必須是一個(gè)絕對(duì)路徑宋雏。checkpoint可以用作DB的一個(gè)read-only copy,也可以用作一個(gè)standalone DB务豺。當(dāng)打開了read/write時(shí)磨总,SST file仍然是硬鏈接,后續(xù)如果文件被廢棄后笼沥,硬鏈接也會(huì)被刪除掉蚪燕。如果用戶不再使用這個(gè)snapshot了,用戶可以直接刪除這個(gè)數(shù)據(jù)目錄來(lái)刪除一個(gè)snapshot奔浅。
??checkpoints廣泛應(yīng)用于MyRocks的在線備份馆纳。MyRocks是MySQL使用RocksDB作為存儲(chǔ)引擎的版本。