我的迭代器代码:
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;
}
}
迭代的顺序无关紧要,但打破循环很重要,所以我们不会迭代不需要的元素。我使用元素按有意义的顺序排序的事实来知道何时中断。callback
可能需要很长时间。
所以我想做的伪代码是
parallel-iterate(iterator)
if(!callback(key,value)
stop-parallel
我尝试应用 concurrency::parallel_for_each,但似乎不适合rocksdb api。
你会如何建议实现并发迭代?