【问题标题】:Unable to read from NEAR's rocksDB无法从 NEAR 的 RocksDB 中读取
【发布时间】:2022-09-27 17:04:01
【问题描述】:

我正在尝试遍历 NEAR 的 RocksDB, 我已经从 s3 下载了小备份,并使用下面的代码迭代 col33(事务) 但它不会打印任何东西,因为 RocksDB 会是空的(但不是很明显), 你能指出我做错了什么吗? 谢谢

use std::env;
use rocksdb::{ColumnFamilyDescriptor, DB, IteratorMode, Options};

fn col_name(col: i32) -> String {
    format!(\"col{}\", col)
}

fn main() {
    println!(\"Hello, RocksDB!\");
    let args: Vec<String> = env::args().collect();
    let path = if args.len() > 1 {
        args.get(1).unwrap().clone()
    } else {
        String::from(\"./data\")
    };
    println!(\"data dir={}\", &path);

    let opts = Options::default();
    let mut cfs:Vec<ColumnFamilyDescriptor> = Vec::new();
    for col in  33..34 {
        cfs.push(
            rocksdb::ColumnFamilyDescriptor::new(col_name(col),opts.clone()));
    }
    let db = DB::open_cf_descriptors_read_only(
        &opts,&path, cfs, false,
    ).unwrap();

    let iter = db.iterator(IteratorMode::Start);
    for (key, value) in iter {
        println!(\"Saw {:?} {:?}\", key, value);
        let k = String::from_utf8(key.to_vec()).unwrap();
        let v = String::from_utf8(value.to_vec()).unwrap();
        println!(\"Saw {:?} {:?}\", k, v);
    }
    let _ = DB::destroy(&Options::default(), &path);
}
  • 我有同样的问题:stackoverflow.com/a/58863524/2836874
  • 哦,好的,谢谢!但是,尽管如此,我希望至少能看到原始字节,但它什么也没读。
  • 数据位于哪个列族中?迭代超过了可能为空的默认列族
  • 循环遍历每个列族并对每个列族进行迭代
  • 是的,我使用了错误的迭代器,非常感谢!

标签: nearprotocol


【解决方案1】:

我发现了问题所在, 正如 Asad Awadia 提到的,我在这里使用迭代器而不是默认列族。

我用过iterator_cf而是得到了一些数据:

    let cf_handle = db.cf_handle("col33").unwrap();
    let iter = db.iterator_cf(cf_handle, IteratorMode::Start);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2015-08-03
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多