Skip to main content

RocksDB - Column Families

Column Families trong RocksDB là một tính năng cho phép bạn tổ chức và quản lý dữ liệu theo các nhóm được đặt tên. Mỗi Column Family có thể có các tùy chọn và cấu hình riêng, cho phép bạn tuỳ chỉnh và tối ưu hóa cách RocksDB lưu trữ và truy xuất dữ liệu.

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

import org.rocksdb.*;

public class RocksDBColumnFamiliesExample {
    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 ColumnFamilyHandle cfHandle = db.createColumnFamily(new ColumnFamilyDescriptor("myColumnFamily".getBytes()))) {
                byte[] key = "myKey".getBytes();
                byte[] value = "myValue".getBytes();

                db.put(cfHandle, key, value);

                byte[] retrievedValue = db.get(cfHandle, key);
                System.out.println("Retrieved value: " + new String(retrievedValue));
            } catch (RocksDBException e) {
                // Xử lý lỗi khi tạo Column Family không thành công
            }
        } catch (RocksDBException e) {
            // Xử lý lỗi khi mở database không thành công
        }
    }
}

Trong ví dụ trên, chúng ta tạo một RocksDB database và sử dụng createColumnFamily() để tạo một Column Family mới với tên "myColumnFamily". Sau đó, chúng ta sử dụng put() để lưu trữ một cặp key-value trong Column Family. Cuối cùng, chúng ta sử dụng get() để lấy giá trị tương ứng với một key từ Column Family.

Lưu ý rằng chúng ta sử dụng try-with-resources để đảm bảo rằng các resources của RocksDB được đóng một cách chính xác sau khi sử dụng xong.

Đó là một ví dụ về cách sử dụng Column Families trong RocksDB bằng Java.

C++:

#include "rocksdb/db.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::ColumnFamilyHandle* cfHandle;
        rocksdb::ColumnFamilyOptions cfOptions;
        rocksdb::Status cfStatus = db->CreateColumnFamily(cfOptions, "myColumnFamily", &cfHandle);
        if (cfStatus.ok()) {
            rocksdb::WriteOptions writeOptions;
            rocksdb::Slice key = "myKey";
            rocksdb::Slice value = "myValue";
            db->Put(writeOptions, cfHandle, key, value);

            std::string retrievedValue;
            rocksdb::ReadOptions readOptions;
            rocksdb::Status retrieveStatus = db->Get(readOptions, cfHandle, key, &retrievedValue);
            if (retrieveStatus.ok()) {
                std::cout << "Retrieved value: " << retrievedValue << std::endl;
            } else {
                // Xử lý lỗi khi lấy giá trị không thành công
            }
        } else