Iterators (이터레이터)는 RocksDB에서 SST 파일이나 MemTable에 저장된 데이터를 순차적으로 탐색할 수 있는 인터페이스입니다. 이터레이터는 데이터를 효율적으로 조회하고 스캔하는 데 사용되며, 특정 범위 내의 데이터를 가져오거나 전체 데이터를 순차적으로 읽어올 수 있습니다. 이터레이터를 통해 데이터베이스의 모든 키-값 쌍을 탐색하거나 특정 조건에 맞는 데이터를 찾는 작업을 수행할 수 있습니다.
DB::NewIterator
: 새로운 이터레이터를 생성하는 메서드입니다. 기본적으로 DB 전체를 순회할 수 있는 이터레이터를 반환합니다.
DB::NewIterators
: 여러 컬럼 패밀리(Column Families)에 대한 이터레이터를 동시에 생성할 수 있습니다.
Iterator::Seek
: 특정 키로 이터레이터를 이동시키는 메서드입니다. 이터레이터가 해당 키 또는 그 다음 키를 가리키게 됩니다.
Iterator::SeekToFirst
: 이터레이터를 데이터베이스의 첫 번째 키로 이동시킵니다.
Iterator::SeekToLast
: 이터레이터를 데이터베이스의 마지막 키로 이동시킵니다.
Iterator::Valid
: 이터레이터가 유효한 위치에 있는지 확인하는 메서드입니다.
Iterator::Next
: 이터레이터를 다음 키로 이동시킵니다.
Iterator::Prev
: 이터레이터를 이전 키로 이동시킵니다.
Iterator::key
: 현재 이터레이터가 가리키고 있는 키를 반환합니다.
Iterator::value
: 현재 이터레이터가 가리키고 있는 값을 반환합니다.
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);
}