4. MemTable

Tasker_Jang·2024년 8월 31일
0

1) MemTable이란 무엇인가?

MemTable은 쉽게 말해서 임시 저장소 역할을 하는 메모리 내 데이터 구조입니다. 새로운 데이터가 디스크에 영구적으로 저장되기 전에 MemTable에 먼저 저장됩니다. MemTable이 가득 차면, 그 내용이 디스크의 SST 파일로 플러시되며, 이 과정은 RocksDB에서 데이터의 효율적인 관리와 빠른 액세스를 가능하게 합니다. MemTable은 최신 데이터를 포함하고 있어, 읽기 작업 시 SST 파일보다 우선적으로 조회됩니다.

2) MemTable을 다룰 수 있는 주요 메서드

  1. Put(): 새로운 키-값 쌍을 MemTable에 삽입합니다.
  2. Get(): MemTable에서 특정 키에 대한 값을 검색합니다.
  3. Delete(): MemTable에서 특정 키를 삭제합니다.
  4. Flush(): MemTable의 내용을 SST 파일로 플러시합니다.
  5. CreateNewMemTable(): 기존 MemTable이 가득 찼을 때 새로운 MemTable을 생성합니다.
  6. MemTableFactory: 사용자 지정 MemTable 구현을 선택하기 위한 팩토리 메서드입니다.

3) 예제 코드

use rocksdb::{Options, DB};

fn main() {
    // RocksDB 옵션 설정
    let mut opts = Options::default();
    opts.create_if_missing(true);

    // 데이터베이스 열기
    let db = DB::open(&opts, "path/to/db").unwrap();

    // 키-값 쌍 삽입 (MemTable에 저장됨)
    db.put(b"key1", b"value1").unwrap();
    db.put(b"key2", b"value2").unwrap();

    // 키-값 쌍 조회 (MemTable에서 먼저 조회)
    match db.get(b"key1") {
        Ok(Some(value)) => println!("Retrieved value: {:?}", value),
        Ok(None) => println!("Value not found"),
        Err(e) => println!("Error occurred: {}", e),
    }

    // Flush MemTable (MemTable의 내용을 SST 파일로 플러시)
    db.flush().unwrap();

    // 데이터베이스 닫기
    drop(db);
}
profile
터널을 지나고 있을 뿐, 길은 여전히 열려 있다.

0개의 댓글