RocksDB 의 Write Ahead Log (WAL)

1526 단어
Overview
RocksDB 에는 세 가지 기본 적 인 데이터 구조 개념 이 있 는데 그것 이 바로 memtable, sstfile 과 logfile 이다.
4. 567917. memtable 은 메모리 데이터 구조 로 새로 쓰기 입 회 는 memtable 을 삽입 하여 선택적으로 logfile 을 기록 합 니 다
4. 567917. logfile 은 디스크 에 순서대로 쓰 는 파일 입 니 다
4. 567917. memtable 이 가득 쓰 이면 flush 에서 디스크 에 있 는 sstfile 로 로그 파일 이 안전하게 삭 제 될 수 있 음 을 알려 줍 니 다.keys 를 찾 는 데 더 좋 은 성능 을 가 질 수 있 도록 sstfile 의 데이터 가 정렬 되 었 습 니 다
RocksDB 에 대한 매번 쓰기 동작 은 두 곳 에 적 혀 있 습 니 다. 1) 메모리 기반 데이터 구조 memtable (quota 에 도달 하면 flush 에서 SST file).2) 미리 쓰기 로그 - Write Ahead Log (WAL).이상 이 발생 하면 WAL 은 memtable 의 데 이 터 를 완전 하 게 복원 하고 db 의 원래 상 태 를 복원 할 수 있 습 니 다.기본 설정 에서 RocksDB 는 사용자 가 쓸 때마다 flush WAL 을 통 해 프로 세 스 crash 후의 일치 성 을 확보 합 니 다.
WAL 의 라 이 프 사이클
예 를 들 어 RocksDB 인 스 턴 스 db 는 두 개의 Column Families: "new cf", "default" 으로 만 들 어 졌 고 Column Families 는 RocksDB 3.0 시 에 만 들 어 졌 으 며 각 key - value pair 는 적어도 하나의 Column Families 에 대응 하 며 지정 되 지 않 으 면 "default" 에 대응 합 니 다.Column Families 는 db 를 논리 적 으로 구분 하 는 경 로 를 제공 합 니 다.db open 이 되면 새로운 WAL 사용자 가 모든 기록 을 영구적 으로 만 듭 니 다.
DB* db;
std::vector column_families;
column_families.push_back(ColumnFamilyDescriptor(
     kDefaultColumnFamilyName, ColumnFamilyOptions()));
column_families.push_back(ColumnFamilyDescriptor(
     "new_cf", ColumnFamilyOptions()));
std::vector handles;
s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db);

좋은 웹페이지 즐겨찾기