Rust-rocksdb: 접두사 λ°˜λ³΅κΈ°κ°€ μ΄μƒν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 11μ›” 08일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: rust-rocksdb/rust-rocksdb

μ•ˆλ…•ν•˜μ„Έμš”,
prefix_iterator 에 μ˜΅μ…˜ ( set_prefix_extractor )μ—μ„œ μ„ μ–Έ ν•œ 것보닀 κΈ΄ 접두사λ₯Ό μ œκ³΅ν•˜λŠ” 경우.
였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  λ‚˜λ¨Έμ§€ 접두사λ₯Ό λ¬΄μ‹œν•˜μ§€ μ•ŠμœΌλ©° Fromκ³Ό ν•¨κ»˜ μ ‘λ‘μ‚¬μ²˜λŸΌ μž‘λ™ν•©λ‹ˆλ‹€.
μ΄λ ‡κ²Œ :

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]

λ”°λΌμ„œ 첫 번째 λ°”μ΄νŠΈλŠ” μ‹€μ œ μ ‘λ‘μ‚¬μ²˜λŸΌ μž‘λ™ν•˜μ§€λ§Œ (μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ”) λ‚˜λ¨Έμ§€λŠ” 접두사도 λ¬΄μ‹œλ˜μ§€λ„ μ•Šκ³  "From"으둜 μ‚¬μš©λ©λ‹ˆλ‹€ ([0,0으둜 μ‹œμž‘ν•˜λŠ” λͺ¨λ“  것을 λ¬΄μ‹œν•˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ] κ·ΈλŸ¬λ‚˜ [0,2]와 같은 더 큰 λ°”μ΄νŠΈ 포함)

이것이 μ›ν•˜λŠ” λ™μž‘μž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ λ²„κ·Έμž…λ‹ˆκΉŒ?

λͺ¨λ“  6 λŒ“κΈ€

λ‚˜λŠ” λ‹Ήμ‹ μ΄λ³΄κ³ μžˆλŠ” 행동이 핡심 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ κ΅¬ν˜„λ˜λŠ” 방식 λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 이것이 μ˜λ„ 된 것인지 "μ •μ˜λ˜μ§€ μ•Šμ€ λ™μž‘"인지 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@elichai λ‹«μ•„λ„λ©λ‹ˆκΉŒ μ•„λ‹ˆλ©΄μ΄ μ–Έμ–΄ 바인딩에 λ¬Έμ œκ°€ μžˆλ‹€κ³  μƒκ°ν•˜μ‹­λ‹ˆκΉŒ?

흠 μ‹€μ œλ‘œ C ++ μ½”λ“œμ— μžˆλŠ”μ§€ ν™•μΈν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ idk.
μ‹œκ°„μ΄ 있으면 곧 확인할 μˆ˜μžˆμ„ κ²ƒμž…λ‹ˆλ‹€ (C ++ κ°œλ°œμžκ°€ μ•„λ‹˜).

@iSynaptic λ³„λ„μ˜ λ¬Έμ œκ°€
write_batch의 put ν•¨μˆ˜μ—λŠ” try! ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šμ§€λ§Œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
이것은 μ˜λ„ 된 κ²ƒμž…λ‹ˆκΉŒ? μ™œ?
https://github.com/rust-rocksdb/rust-rocksdb/blob/master/src/db.rs#L1147

@elichai 였λ₯˜ κ°€λŠ₯성은 κ΅¬ν˜„ μ„ΈλΆ€ μ‚¬ν•­μ΄λ―€λ‘œ μ˜λ„ 된 λ™μž‘μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. μ•žμœΌλ‘œ μ‚¬μš©μž 용 APIλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ μ΄ λ‚΄λΆ€ κ΅¬ν˜„μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@elichai 이제 prefix_iterator 이 μ΄μƒν•˜κ²Œ μž‘λ™ν•˜μ§€λ§Œ μ„€κ³„λœλŒ€λ‘œ μž‘λ™ν•œλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. # 254μ—μ„œ λ™μž‘μ„ κ²€μ¦ν•˜κ³  λ™μž‘μ„ μ„€λͺ…ν•˜λŠ” 주석을 ν¬ν•¨ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€ (μ•„λž˜ 인용). λ‚΄κ°€ _ μƒκ°ν•˜λŠ” _ μ›ν•˜λŠ” λ™μž‘μ— 따라 일반 반볡기λ₯Ό μ‚¬μš©ν•˜κ³  μžμ‹ μ˜ ReadOptions μ œκ³΅ν•΄μ•Όν•©λ‹ˆλ‹€. 이것은 # 253μ—μ„œ ν™œμ„±ν™”λ©λ‹ˆλ‹€.

μ„€λͺ… : db.prefix_iterator λŠ” 전체 prefix 와 μΌμΉ˜ν•˜λŠ” 첫 번째 ν‚€λ₯Ό 찾도둝 κΈ°λ³Έ μ˜΅μ…˜μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ λ°˜λ³΅κΈ°λŠ” key μ—μ„œ μΆ”μΆœ 된 접두사가 prefix μ—μ„œ μΆ”μΆœ 된 접두사와 μΌμΉ˜ν•˜λŠ” ν•œ μŒμ„ 계속 μ½μŠ΅λ‹ˆλ‹€.

@vitvakatu @aleksuss 반볡자λ₯Ό κ΅¬μ„±ν•˜κ³  κ°€λŠ₯ν•œ ν•œ λ‹¨μˆœν™”ν•˜λŠ” λͺ¨λ“  ν•¨μˆ˜λ₯Ό μ‚΄νŽ΄ λ΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‹€μ†Œ ν˜Όλž€ μŠ€λŸ½μŠ΅λ‹ˆλ‹€. λͺ‡ 가지 아이디어가 있고 PR을 ν•¨κ»˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

rrichardson picture rrichardson  Β·  7μ½”λ©˜νŠΈ

zach-schoenberger picture zach-schoenberger  Β·  7μ½”λ©˜νŠΈ

iSynaptic picture iSynaptic  Β·  12μ½”λ©˜νŠΈ

jonhoo picture jonhoo  Β·  22μ½”λ©˜νŠΈ

yiyanwannian picture yiyanwannian  Β·  6μ½”λ©˜νŠΈ