こんにちは、rocksdbインスタンス間のレプリケーションを実装したいと思います。 私が理解している限り、rust-rocksdbは、最後の1つの機能である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の生の値を使用すると、ネットワーク経由でセカンダリデータベースレプリカに送信できます。