Rust-rocksdb: Mendukung serialisasi dan deserialisasi WriteBatch.

Dibuat pada 7 Jan 2021  ·  4Komentar  ·  Sumber: rust-rocksdb/rust-rocksdb

Halo, saya ingin menerapkan replikasi antara instance rockdb. Sejauh yang saya mengerti, sekarang rust-rocksdb mendukung semua api yang diperlukan, kecuali satu fitur terakhir - serialisasi writebatch. Saya ingin membuat WriteBatch dari byte dan membuat serial menjadi byte, untuk dapat mengirimkannya melalui jaringan untuk replikasi.

Apakah ada cara untuk mencapainya? Atau saya bisa membuat PR dengan solusi saya.

Komentar yang paling membantu

Saya butuh sesuatu seperti:

impl WriteBatch {
    /// Tries to serialize writebatch as raw bytes vector with null values
    /// Its useful for sending write batches over network.
    pub fn try_into_raw(&self) -> Result<Vec<u8>, Error> {
        let data;
        unsafe {
            let mut repsize1: size_t = 0;
            let rep: *const i8 = ffi::rocksdb_writebatch_data(self.inner, &mut repsize1);
            let cs = slice_from_raw_parts(rep as *const u8, repsize1);
            data = cs.as_ref().ok_or_else(|| {
                Error::new("writeBatch reference is Null".to_string())
            })?.to_vec();
        }
        Ok(data)
    }

    /// creates writeBatch from raw input
    pub fn from_raw(data: &[u8]) -> Self {
        let u8slice = unsafe {
            &*(data as *const _ as *const [i8])
        };
        WriteBatch {
            inner: unsafe { ffi::rocksdb_writebatch_create_from(u8slice.as_ptr(), data.len() as size_t) }
        }
    }
}

Dengan nilai mentah writeBatch, saya akan dapat mengirimkannya melalui jaringan ke replika database sekunder.

Semua 4 komentar

Maaf untuk jawaban yang terlambat. Sejujurnya, saya kurang terlibat dengan apa pun yang terkait dengan RocksDB sekarang, jadi saya tidak sepenuhnya memahami situasi Anda. Bisakah Anda menjelaskan tentang api apa yang perlu ditambahkan?

Saya butuh sesuatu seperti:

impl WriteBatch {
    /// Tries to serialize writebatch as raw bytes vector with null values
    /// Its useful for sending write batches over network.
    pub fn try_into_raw(&self) -> Result<Vec<u8>, Error> {
        let data;
        unsafe {
            let mut repsize1: size_t = 0;
            let rep: *const i8 = ffi::rocksdb_writebatch_data(self.inner, &mut repsize1);
            let cs = slice_from_raw_parts(rep as *const u8, repsize1);
            data = cs.as_ref().ok_or_else(|| {
                Error::new("writeBatch reference is Null".to_string())
            })?.to_vec();
        }
        Ok(data)
    }

    /// creates writeBatch from raw input
    pub fn from_raw(data: &[u8]) -> Self {
        let u8slice = unsafe {
            &*(data as *const _ as *const [i8])
        };
        WriteBatch {
            inner: unsafe { ffi::rocksdb_writebatch_create_from(u8slice.as_ptr(), data.len() as size_t) }
        }
    }
}

Dengan nilai mentah writeBatch, saya akan dapat mengirimkannya melalui jaringan ke replika database sekunder.

Saya kira masuk akal untuk menambahkan api seperti itu. Apakah Anda ingin mengajukan permintaan tarik?

Tentu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

zach-schoenberger picture zach-schoenberger  ·  7Komentar

cetra3 picture cetra3  ·  9Komentar

spacejam picture spacejam  ·  3Komentar

eupn picture eupn  ·  3Komentar

jonhoo picture jonhoo  ·  22Komentar