【问题标题】:Sorting by value in rocksdb在rocksdb中按值排序
【发布时间】:2020-08-08 17:27:04
【问题描述】:

Rocksdb 允许按键对记录进行排序,但我想按值对记录进行排序。有可能吗?

【问题讨论】:

  • 如果回答了问题,请将答案标记为正确:)

标签: rocksdb rocksdb-java okvs


【解决方案1】:

RocksDB 不直接支持二级索引,但您可以在 RocksDB 之上构建自己的二级索引。这是一个使用BatchWrite的非常简单的例子:

// create 2 ColumnFamily, one for data, one for index
Status s = db->CreateColumnFamily(cf_options, "Data", &data_handle);
Status s = db->CreateColumnFamily(cf_options, "Index", &index_handle);

// Use batch to guarantee consistency between data and index
WriteBatch batch;
batch.Put(data_handle, "key1", "value1");
batch.Put(index_handle, "value1", "key1");

db->Write(WriteOptions(), &batch);

std::string result;
s = db_->Get(ReadOptions(), data_handle, "key1", &result);
// index ColumnFamily is sorted by value
s = db_->Get(ReadOptions(), index_handle, "value1", &result);

这是一个过于简化的示例,实际上您需要处理许多其他事情,例如重复的键或值、空间放大等。 有现有的二级索引实现供您参考,例如: mokurokumyrocks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2016-09-09
    • 2013-08-16
    • 1970-01-01
    • 2013-09-27
    • 2016-01-08
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多