10. Iterators

Tasker_Jang·2024년 8월 31일
0

1) Iterators란 무엇인가?

Iterators (이터레이터)는 RocksDB에서 SST 파일이나 MemTable에 저장된 데이터를 순차적으로 탐색할 수 있는 인터페이스입니다. 이터레이터는 데이터를 효율적으로 조회하고 스캔하는 데 사용되며, 특정 범위 내의 데이터를 가져오거나 전체 데이터를 순차적으로 읽어올 수 있습니다. 이터레이터를 통해 데이터베이스의 모든 키-값 쌍을 탐색하거나 특정 조건에 맞는 데이터를 찾는 작업을 수행할 수 있습니다.

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

  1. DB::NewIterator: 새로운 이터레이터를 생성하는 메서드입니다. 기본적으로 DB 전체를 순회할 수 있는 이터레이터를 반환합니다.

  2. DB::NewIterators: 여러 컬럼 패밀리(Column Families)에 대한 이터레이터를 동시에 생성할 수 있습니다.

  3. Iterator::Seek: 특정 키로 이터레이터를 이동시키는 메서드입니다. 이터레이터가 해당 키 또는 그 다음 키를 가리키게 됩니다.

  4. Iterator::SeekToFirst: 이터레이터를 데이터베이스의 첫 번째 키로 이동시킵니다.

  5. Iterator::SeekToLast: 이터레이터를 데이터베이스의 마지막 키로 이동시킵니다.

  6. Iterator::Valid: 이터레이터가 유효한 위치에 있는지 확인하는 메서드입니다.

  7. Iterator::Next: 이터레이터를 다음 키로 이동시킵니다.

  8. Iterator::Prev: 이터레이터를 이전 키로 이동시킵니다.

  9. Iterator::key: 현재 이터레이터가 가리키고 있는 키를 반환합니다.

  10. Iterator::value: 현재 이터레이터가 가리키고 있는 값을 반환합니다.

3) 예제 코드

use rocksdb::{DB, Options, IteratorMode};

fn main() {
    // RocksDB 데이터베이스 열기 또는 생성
    let path = "_path_for_rocksdb_storage";
    let db = DB::open_default(path).unwrap();

    // 새로운 이터레이터 생성 (전체 DB를 순회)
    let mut iter = db.iterator(IteratorMode::Start);

    // 첫 번째 키로 이동
    iter.seek_to_first();
    if iter.valid() {
        println!("First Key: {:?}, Value: {:?}", iter.key(), iter.value());
    }

    // 마지막 키로 이동
    iter.seek_to_last();
    if iter.valid() {
        println!("Last Key: {:?}, Value: {:?}", iter.key(), iter.value());
    }

    // 특정 키로 이동
    iter.seek(b"some_key");
    if iter.valid() {
        println!("Seek Key: {:?}, Value: {:?}", iter.key(), iter.value());
    }

    // 이터레이터를 사용하여 모든 키-값 쌍 순회
    iter.seek_to_first();
    while iter.valid() {
        println!("Key: {:?}, Value: {:?}", iter.key(), iter.value());
        iter.next(); // 다음 키로 이동
    }

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

0개의 댓글