مرحبًا ، أريد تنفيذ النسخ المتماثل بين مثيلات rocksdb. بقدر ما أفهم ، يدعم الآن rust-rocksdb جميع واجهات برمجة التطبيقات المطلوبة ، باستثناء ميزة أخيرة - تسلسل writebatch. أريد إنشاء WriteBatch من البايت وتسلسله إلى بايت ، حتى أتمكن من إرساله عبر الشبكة للنسخ المتماثل.
هل من طريقة لتحقيق ذلك؟ أو يمكنني إجراء العلاقات العامة مع الحل الخاص بي.
آسف على الرد المتأخر. بصراحة ، أنا أقل انخراطًا في أي شيء يتعلق بـ 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 ، سأتمكن من إرسالها عبر الشبكة إلى نسخة قاعدة البيانات الثانوية.