Bonjour, je souhaite implémenter la réplication entre les instances rocksdb. Autant que je sache, rust-rocksdb prend désormais en charge toutes les API nécessaires, à l'exception d'une dernière fonctionnalité - la sérialisation writebatch. Je veux créer WriteBatch à partir d'octets et le sérialiser en octets, pour pouvoir l'envoyer sur le réseau pour la réplication.
Existe-t-il un moyen d'y parvenir? Ou je peux faire des relations publiques avec ma solution.
Désolé pour la réponse tardive. Honnêtement, je suis moins impliqué dans tout ce qui concerne RocksDB maintenant, donc je ne comprends pas entièrement votre situation. Pourriez-vous s'il vous plaît préciser quelle API doit être ajoutée?
J'ai besoin de quelque chose comme :
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) }
}
}
}
Avec la valeur brute de writeBatch, je pourrais l'envoyer sur le réseau à la réplique de la base de données secondaire.
Je suppose qu'il est logique d'ajouter une telle API. Souhaitez-vous soumettre une demande de tirage ?
Sûr.
Commentaire le plus utile
J'ai besoin de quelque chose comme :
Avec la valeur brute de writeBatch, je pourrais l'envoyer sur le réseau à la réplique de la base de données secondaire.