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
ColumnFamily
λ₯Ό λ°ννμ§ μκ³ λμ 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 λ€μ μ£Όμ ν κ² κ°μμ.
κ°μ₯ μ μ©ν λκΈ
μ, κ·Έλ μ΅λλ€. κ°κΉμ΄ μμΌ λ΄μ μΆμν κ³νμ λλ€.