Skip to content

Commit 8ab6a09

Browse files
Use BTreeMap to avoid sorting (#615)
1 parent 48f11f7 commit 8ab6a09

File tree

1 file changed

+3
-7
lines changed
  • differential-dataflow/src/operators/arrange

1 file changed

+3
-7
lines changed

differential-dataflow/src/operators/arrange/upsert.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
//! }).unwrap();
9999
//! ```
100100
101-
use std::collections::{BinaryHeap, HashMap};
101+
use std::collections::{BinaryHeap, BTreeMap};
102102

103103
use timely::order::{PartialOrder, TotalOrder};
104104
use timely::dataflow::{Scope, Stream};
@@ -216,7 +216,7 @@ where
216216
}
217217

218218
// Extract upserts available to process as of this `upper`.
219-
let mut to_process = HashMap::new();
219+
let mut to_process = BTreeMap::new();
220220
while priority_queue.peek().map(|std::cmp::Reverse((t,_k,_v))| !upper.less_equal(t)).unwrap_or(false) {
221221
let std::cmp::Reverse((time, key, val)) = priority_queue.pop().expect("Priority queue just ensured non-empty");
222222
to_process.entry(key).or_insert(Vec::new()).push((time, std::cmp::Reverse(val)));
@@ -229,15 +229,11 @@ where
229229
priority_queue.shrink_to_fit();
230230
}
231231

232-
// Put (key, list) into key order, to match cursor enumeration.
233-
let mut to_process = to_process.into_iter().collect::<Vec<_>>();
234-
to_process.sort();
235-
236232
// Prepare a cursor to the existing arrangement, and a batch builder for
237233
// new stuff that we add.
238234
let (mut trace_cursor, trace_storage) = reader_local.cursor();
239235
let mut builder = Bu::new();
240-
for (key, mut list) in to_process.drain(..) {
236+
for (key, mut list) in to_process {
241237

242238
// The prior value associated with the key.
243239
let mut prev_value: Option<V> = None;

0 commit comments

Comments
 (0)