【发布时间】:2020-08-08 17:27:04
【问题描述】:
Rocksdb 允许按键对记录进行排序,但我想按值对记录进行排序。有可能吗?
【问题讨论】:
-
如果回答了问题,请将答案标记为正确:)
标签: rocksdb rocksdb-java okvs
Rocksdb 允许按键对记录进行排序,但我想按值对记录进行排序。有可能吗?
【问题讨论】:
标签: rocksdb rocksdb-java okvs
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);
这是一个过于简化的示例,实际上您需要处理许多其他事情,例如重复的键或值、空间放大等。 有现有的二级索引实现供您参考,例如: mokuroku、myrocks等
【讨论】: