Rust-rocksdb: دعم تسلسل WriteBatch وإلغاء التسلسل.

تم إنشاؤها على ٧ يناير ٢٠٢١  ·  4تعليقات  ·  مصدر: rust-rocksdb/rust-rocksdb

مرحبًا ، أريد تنفيذ النسخ المتماثل بين مثيلات rocksdb. بقدر ما أفهم ، يدعم الآن rust-rocksdb جميع واجهات برمجة التطبيقات المطلوبة ، باستثناء ميزة أخيرة - تسلسل writebatch. أريد إنشاء WriteBatch من البايت وتسلسله إلى بايت ، حتى أتمكن من إرساله عبر الشبكة للنسخ المتماثل.

هل من طريقة لتحقيق ذلك؟ أو يمكنني إجراء العلاقات العامة مع الحل الخاص بي.

التعليق الأكثر فائدة

أحتاج شيئًا مثل:

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 ، سأتمكن من إرسالها عبر الشبكة إلى نسخة قاعدة البيانات الثانوية.

ال 4 كومينتر

آسف على الرد المتأخر. بصراحة ، أنا أقل انخراطًا في أي شيء يتعلق بـ 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. هل ترغب في تقديم طلب سحب؟

بالتأكيد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

iSynaptic picture iSynaptic  ·  11تعليقات

zach-schoenberger picture zach-schoenberger  ·  5تعليقات

iSynaptic picture iSynaptic  ·  12تعليقات

valeriansaliou picture valeriansaliou  ·  4تعليقات

iSynaptic picture iSynaptic  ·  31تعليقات