Мой код итератора:
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.
Как бы вы предложили реализовать параллельную итерацию?