cf_handle
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рд░реАрдб-рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рд╣реЙрдЯ-рдкрд╛рде рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдРрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо create_cf
рдФрд░ drop_cf
рдФрд░ рдЖрдВрддрд░рд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ DB
рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЙрд▓рд░ рдХреЛ рдХреНрд░рдо рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ DB
рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕ рддрд░рд╣?
use std::collections::HashMap;
#[derive(Debug)]
struct ColumnFamily(i32);
struct DB {
cfs:HashMap<i32,ColumnFamily>,
}
impl DB {
fn new()->DB{
let mut cfs = HashMap::new();
cfs.insert(1,ColumnFamily(1));
cfs.insert(2,ColumnFamily(2));
DB{
cfs
}
}
fn get(&self,key:i32)->&ColumnFamily{
self.cfs.get(&key).unwrap()
}
fn drop_key(&mut self,key:i32){
self.cfs.remove(&key);
}
}
fn main() {
let mut f = DB::new();
let a = f.get(1);
println!("{:?}",a);
f.drop_key(1);
let c = f.get(2);
println!("{:?}",c);
}
FWIW, paritech рдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ cf_handle
рд╣реИ Copy
, рдЬреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ (OTOH рдХреЛрдИ рддрд░реНрдХ рджреЗрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ), рд▓реЗрдХрд┐рди рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред
@hjiayz рд╣рд╛рдБ,
рдЬрдм рдореИрдВрдиреЗ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА (рдпрд╛рдиреА рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рддреЗ/рдЫреЛрдбрд╝рддреЗ рд╕рдордп &mut self
) рддреЛ рдореБрдЭреЗ ColumnFamily
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрдИрдВред рдпрд╣ PhantomData
рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрддрд╛ рд╣реИ:
#[test]
fn property_cf_test() {
let n = DBPath::new("_rust_rocksdb_property_cf_test");
{
let opts = Options::default();
let mut db = DB::open_default(&n).unwrap(); // Notice the `mut`
let cf = db.create_cf("cf1", &opts).unwrap();
let value = db.property_value_cf(cf, "rocksdb.stats").unwrap().unwrap();
assert!(value.contains("Stats"));
}
}
рдЬрдм db рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд┐ рд▓реЗрддрд╛ рд╣реИ рдмрдирд╛рдиреЗ рддреНрд░реБрдЯрд┐ рд╣реЛ &self
рдЬреИрд╕реЗ, db.property_value_cf()
рдФрд░ рдПрдХ рдореЗрдВ рдЧреБрдЬрд░ ColumnFamily
(рдЬреЛ рднрдВрдбрд╛рд░ рдПрдХ &mut
рдореЗрдВ db
рдлрд╝реАрд▓реНрдб):
error[E0502]: cannot borrow `db` as immutable because it is also borrowed as mutable
--> tests/test_property.rs:39:21
|
38 | let cf = db.create_cf("cf1", &opts).unwrap();
| -- mutable borrow occurs here
39 | let value = db.property_value_cf(cf, "rocksdb.stats").unwrap().unwrap();
| ^^ -- mutable borrow later used here
| |
| immutable borrow occurs here
рдореИрдВ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рдХрд▓реНрдк ColumnFamily
рдХреЛ create_cf
рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ cf_handle()
рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд▓рд╛рдиреЗ рджреЗрдВред
#[test]
fn property_cf_test() {
let n = DBPath::new("_rust_rocksdb_property_cf_test");
{
let opts = Options::default();
let mut db = DB::open_default(&n).unwrap();
db.create_cf("cf1", &opts).unwrap();
let cf = db.cf_handle("cf1").unwrap(); // Get the CF
let value = db.property_value_cf(cf, "rocksdb.stats").unwrap().unwrap();
assert!(value.contains("Stats"));
}
}
рдХреНрдпрд╛ create_cf()
рдХреЛ Result<(), Error>
рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛?
@dvdplm рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ ColumnFamily
рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рдмрди рдЧрдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рдРрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рднрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓рдо рдкрд░рд┐рд╡рд╛рд░ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рднреА рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрднрд╡рддрдГ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо cf_handle
рд╕реЗ рддрд╛рд▓реЗ рдХреИрд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдпрд╣ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреАред
@iSynaptic рд╕реЗ рд╕рд╣рдордд рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ColumnFamily
рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реМрдЯрд╛рдирд╛ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИред
рд╢рд╛рдпрдж #298 рдХрд╛ тАЛтАЛрд╡рд┐рд▓рдп рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЗрд╕реЗ #314 рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
рд╣рд╛рдБ рдпрд╣реА рд╣реИред рд╣рдо рдЗрд╕реЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
@aleksuss рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? :)
@bkchr рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдБ рдпрд╣реА рд╣реИред рд╣рдо рдЗрд╕реЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред