์๋ ํ์ธ์, rockdb ์ธ์คํด์ค ๊ฐ์ ๋ณต์ ๋ฅผ ๊ตฌํํ๊ณ ์ถ์ต๋๋ค. ๋ด๊ฐ ์ดํดํ๋ ํ ์ด์ rust-rocksdb๋ ๋ง์ง๋ง ๊ธฐ๋ฅ์ธ writebatch ์ง๋ ฌํ๋ฅผ ์ ์ธํ๊ณ ํ์ํ ๋ชจ๋ API๋ฅผ ์ง์ํฉ๋๋ค. ๋ณต์ ๋ฅผ ์ํด ๋คํธ์ํฌ๋ฅผ ํตํด ๋ณด๋ผ ์ ์๋๋ก ๋ฐ์ดํธ์์ WriteBatch๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํธ๋ก ์ง๋ ฌํํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๊ฒ์ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋๋ ๋ด ์๋ฃจ์ ์ผ๋ก PR์ ํ ์ ์์ต๋๋ค.
๋ฆ์ ๋ต๋ณ ์ฃ์กํฉ๋๋ค. ์์งํ ์ง๊ธ์ RocksDB์ ๊ด๋ จ๋ ์ผ์ ๋ ๊ด์ฌํ๊ณ ์์ผ๋ฏ๋ก ๊ทํ์ ์ํฉ์ ์์ ํ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด๋ค API๋ฅผ ์ถ๊ฐํด์ผ ํ๋์ง ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํฉ๋๋ค.
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) }
}
}
}
writeBatch์ ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ๋ฅผ ํตํด ๋ณด์กฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ ๋ณธ์ผ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ API๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์๊ฒ ์ต๋๊น?
ํ์ ํ๋.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํฉ๋๋ค.
writeBatch์ ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ๋ฅผ ํตํด ๋ณด์กฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ ๋ณธ์ผ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.