C++11 并行化rocksdb迭代器
我的迭代器代码:C++11 并行化rocksdb迭代器,c++11,concurrency,iterator,parallel-for,rocksdb,C++11,Concurrency,Iterator,Parallel For,Rocksdb,我的迭代器代码: Iterator* iterator = _db->NewIterator(ReadOptions()); for (iterator->SeekToFirst(); iterator->Valid(); iterator->Next()) { Slice const& key = iterator->key(); Slice const& value = iterator->value(); bool
Iterator* iterator = _db->NewIterator(ReadOptions());
for (iterator->SeekToFirst(); iterator->Valid(); iterator->Next()) {
Slice const& key = iterator->key();
Slice const& value = iterator->value();
bool continue = callback(key, value);
if (!continue) {
break;
}
}
迭代的顺序并不重要,但是打破循环很重要,这样我们就不会迭代不需要的元素。我使用元素按有意义的顺序排序的事实来知道何时中断<代码>回调可能需要很长时间
所以我想做的伪代码是
parallel-iterate(iterator)
if(!callback(key,value)
stop-parallel
我尝试为每个应用并发::并行,但似乎不适合rocksdb api
您建议如何实现并发迭代?我可能弄错了,但我认为Rocks中的迭代器不是线程安全的,因此您需要为每个线程使用一个迭代器。显然,为了使这一点有意义,您需要让每个迭代器在单独的数据范围内进行操作 你可以: