Skip to main content

RocksDB - Iterator

Trong RocksDB, iterator được sử dụng để duyệt qua toàn bộ RocksDB và truy xuất dữ liệu. Iterator cho phép bạn lấy giá trị của các key trong RocksDB theo thứ tự tuần tự.

Dưới đây là một ví dụ về cách sử dụng iterator trong RocksDB bằng Java:

import org.rocksdb.*;

public class RocksDBIteratorExample {
    public static void main(String[] args) {
        RocksDB.loadLibrary();
        try (final Options options = new Options().setCreateIfMissing(true);
             final RocksDB db = RocksDB.open(options, "/path/to/database")) {
            try (final RocksIterator iterator = db.newIterator()) {
                for (iterator.seekToFirst(); iterator.isValid(); iterator.next()) {
                    byte[] key = iterator.key();
                    byte[] value = iterator.value();
                    System.out.println("Key: " + new String(key) + ", Value: " + new String(value));
                }
            }
        } catch (RocksDBException e) {
            // Xử lý lỗi khi mở database không thành công
        }
    }
}

Trong ví dụ trên, chúng ta sử dụng db.newIterator() để tạo một iterator mới cho RocksDB. Với mỗi phần tử trong RocksDB, chúng ta sử dụng iterator.key()iterator.value() để lấy giá trị của key và value tương ứng. Tiếp theo, chúng ta có thể thực hiện các thao tác xử lý với key và value như mong muốn.

Iterator trong RocksDB với C++

Đối với C++, RocksDB cung cấp một API tương tự để sử dụng iterator. Dưới đây là một ví dụ về cách sử dụng iterator trong RocksDB bằng C++:

#include "rocksdb/db.h"
#include "rocksdb/iterator.h"

int main() {
    rocksdb::DB* db;
    rocksdb::Options options;
    options.create_if_missing = true;
    rocksdb::Status status = rocksdb::DB::Open(options, "/path/to/database", &db);
    if (status.ok()) {
        rocksdb::Iterator* it = db->NewIterator(rocksdb::ReadOptions());
        for (it->SeekToFirst(); it->Valid(); it->Next()) {
            rocksdb::Slice key = it->key();
            rocksdb::Slice value = it->value();
            std::cout << "Key: " << key.ToString() << ", Value: " << value.ToString() << std::endl;
        }
        delete it;
    } else {
        // Xử lý lỗi khi mở database không thành công
    }
    delete db;
    return 0;
}

Trong ví dụ trên, chúng ta sử dụng db->NewIterator(rocksdb::ReadOptions()) để tạo một iterator mới cho RocksDB. Với mỗi phần tử trong RocksDB, chúng ta sử dụng it->key()it->value() để lấy giá trị của key và value tương ứng. Tiếp theo, chúng ta có thể thực hiện các thao tác xử lý với key và value như mong muốn.