你好,我想实现rocksdb实例之间的复制。 据我了解,现在 rust-rocksdb 支持所有需要的 api,除了最后一个功能 - writebatch 序列化。 我想从字节创建 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 的原始值,我将能够通过网络将其发送到辅助数据库副本。