Rust-rocksdb: рдЙрдкрд╕рд░реНрдЧ рдЪрд▓рдиреЗрд╡рд╛рд▓рд╛ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдирд╡ре░ 2018  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-rocksdb/rust-rocksdb

рдирдорд╕реНрддреЗ,
рдпрджрд┐ рдЖрдк prefix_iterator рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рдЙрдкрд╕рд░реНрдЧ рджреЗрддреЗ рд╣реИрдВ ( set_prefix_extractor )ред
рдЖрдкрдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдпрд╣ рдмрд╛рдХреА рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣:

set_prefix_extractor(len)
myp = &[1u8; len+1];
prefix(myp[..len]) + From(myp)

рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг:

let prefix_extractor = rocksdb::SliceTransform::create_fixed_prefix(1);
let mut opts = Options::default();
opts.create_if_missing(true);
opts.set_prefix_extractor(prefix_extractor);
let db = DB::open(&opts, &tempdir).unwrap();


db.put(&[0,0,0,0], &[0,0,0,0]).unwrap();
db.put(&[0,0,0,1], &[0,0,0,1]).unwrap();
db.put(&[0,1,0,1], &[0,1,0,1]).unwrap();
db.put(&[0,1,1,1], &[0,1,1,1]).unwrap();
db.put(&[0,1,2,1], &[0,1,2,1]).unwrap();
db.put(&[2,0,0,0], &[2,0,0,0]).unwrap();
db.put(&[2,2,2,2], &[2,2,2,2]).unwrap();

let me = db.prefix_iterator(&[0,1,0]);
for (key, value) in me {
    println!("Saw {:?} {:?}", key, value);
}

рдпрд╣ рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛:

Saw [0, 1, 0, 1] [0, 1, 0, 1]
Saw [0, 1, 1, 1] [0, 1, 1, 1]
Saw [0, 1, 2, 1] [0, 1, 2, 1]

рддреЛ рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрд╕рд░реНрдЧ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рд╕рдЯреАрдХ рдорд┐рд▓рд╛рди рджреЗрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдмрд╛рдХреА рди рддреЛ рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВ рдФрд░ рди рд╣реА рдЕрдирджреЗрдЦрд╛, рдЙрдиреНрд╣реЗрдВ "рд╕реЗ" рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЖрдк рдЗрд╕ рдЕрдирджреЗрдЦреА рдХреЛ рд╕рдм рдХреБрдЫ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ [0,0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ] ] рд▓реЗрдХрд┐рди [0,2] рдЬреИрд╕реЗ рдмрдбрд╝реЗ рдмрд╛рдЗрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд╣реИ рдХрд┐ рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдпрд╛ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░" рд╕реЗ рд╣реИред

@elichai рдареАрдХ рд╣реИ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ?

рд╣рдореНрдо рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ C ++ рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП idkред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЬрд╛рдБрдЪ рдХрд░ рд▓реВрдБ (C ++ рджреЗрд╡ рдирд╣реАрдВ)

@iSynaptic рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ,
put рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдп try! рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рд╡реЗ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ? рдХреНрдпреЛрдВ?
https://github.com/rust-rocksdb/rust-rocksdb/blob/master/src/db.rs#L1147

@elichai рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдИ рднреА рдореМрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЗрд╕ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ

@ рд╕реЗрд▓рд┐рд╣рд╛рдИ рдЕрдм рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ prefix_iterator рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред # 254 рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рд╛ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИ (рдиреАрдЪреЗ рдЙрджреНрдзреГрдд)ред I _think_ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рд╢рд╛рдпрдж рдПрдХ рдирд┐рдпрдорд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ ReadOptions рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдпрд╣ # 253 рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг : db.prefix_iterator рдкрд╣рд▓реА рдХреБрдВрдЬреА рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реЗ prefix рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рд╕реЗ, рдкреБрдирд░рд╛рд╡реГрддрд┐ рдЬреЛрдбрд╝реЗ рдХреЛ рддрдм рддрдХ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ key рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдЙрдкрд╕рд░реНрдЧ prefix рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред

@vitvakatu @aleksuss рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ - рд╡реЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдФрд░ рдореИрдВ рдПрдХ рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕