Rust-rocksdb: рд░рд╛рдЗрдЯрдмреИрдЪ рдХреНрд░рдорд╛рдВрдХрди рдФрд░ рдЕрдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬрдире░ 2021  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-rocksdb/rust-rocksdb

рд╣реИрд▓реЛ, рдореИрдВ рд░реЙрдХреНрд╕рдбреАрдмреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рдЕрдм rust-rocksdb рдПрдХ рдЕрдВрддрд┐рдо рд╡рд┐рд╢реЗрд╖рддрд╛ - рд░рд╛рдЗрдЯрдмреИрдЪ рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдПрдкрд┐рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рд░рд╛рдЗрдЯрдмреИрдЪ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреНрдпрд╛ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдпрд╛ рдореИрдВ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП:

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) }
        }
    }
}

рд░рд╛рдЗрдЯрдмреИрдЪ рдХреЗ рдХрдЪреНрдЪреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рдореИрдВ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рджреНрд╡рд┐рддреАрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдЕрдм RocksDB рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдХрдо рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ?

рдореБрдЭреЗ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП:

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) }
        }
    }
}

рд░рд╛рдЗрдЯрдмреИрдЪ рдХреЗ рдХрдЪреНрдЪреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рдореИрдВ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рджреНрд╡рд┐рддреАрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рдЬрд╝рд░реВрд░ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

iSynaptic picture iSynaptic  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

freehere107 picture freehere107  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yiyanwannian picture yiyanwannian  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zach-schoenberger picture zach-schoenberger  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rohitjoshi picture rohitjoshi  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ