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