Skip to content
This repository was archived by the owner on Jul 3, 2023. It is now read-only.

Commit fafedff

Browse files
Kixironryzhyk
authored andcommitted
Renamed OrderedColumnLeaf to ColumnLayer
`OrderedColumnLeaf` was a bit of a misnomer, it implies that the collection is inherently ordered when it isn't. This pivots `OrderedColumnLeaf` to be more of a general purpose collection primitive that's used as a building block of other things, such as `OrdZSet`, `IndexedOrdZSet`, `HashedKVBatch` and unordered batches
1 parent 5a00649 commit fafedff

File tree

20 files changed

+186
-208
lines changed

20 files changed

+186
-208
lines changed

benches/column_leaf.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion
22
use dbsp::{
33
algebra::{AddAssignByRef, AddByRef, MonoidValue, NegByRef},
44
trace::layers::{
5-
column_leaf::{OrderedColumnLeaf, OrderedColumnLeafBuilder, UnorderedColumnLeafBuilder},
5+
column_layer::{ColumnLayer, ColumnLayerBuilder, UnorderedColumnLayerBuilder},
66
Builder, MergeBuilder, Trie, TupleBuilder,
77
},
88
};
@@ -25,37 +25,37 @@ where
2525
data
2626
}
2727

28-
fn data_builder<K, R>(length: usize) -> UnorderedColumnLeafBuilder<K, R>
28+
fn data_builder<K, R>(length: usize) -> UnorderedColumnLayerBuilder<K, R>
2929
where
3030
K: Ord + Clone,
3131
R: MonoidValue,
3232
Standard: Distribution<(K, R)>,
3333
{
3434
let mut rng = Xoshiro256StarStar::from_seed(SEED);
3535

36-
let mut builder = UnorderedColumnLeafBuilder::new();
36+
let mut builder = UnorderedColumnLayerBuilder::new();
3737
for _ in 0..length {
3838
builder.push_tuple(rng.gen());
3939
}
4040
builder
4141
}
4242

43-
fn data_leaf<K, R>(length: usize) -> OrderedColumnLeaf<K, R>
43+
fn data_leaf<K, R>(length: usize) -> ColumnLayer<K, R>
4444
where
4545
K: Ord + Clone,
4646
R: MonoidValue,
4747
Standard: Distribution<(K, R)>,
4848
{
4949
let mut rng = Xoshiro256StarStar::from_seed(SEED);
5050

51-
let mut builder = UnorderedColumnLeafBuilder::with_capacity(length);
51+
let mut builder = UnorderedColumnLayerBuilder::with_capacity(length);
5252
for _ in 0..length {
5353
builder.push_tuple(rng.gen());
5454
}
5555
builder.done()
5656
}
5757

58-
fn data_leaves<K, R>(length: usize) -> (OrderedColumnLeaf<K, R>, OrderedColumnLeaf<K, R>)
58+
fn data_leaves<K, R>(length: usize) -> (ColumnLayer<K, R>, ColumnLayer<K, R>)
5959
where
6060
K: Ord + Clone,
6161
R: MonoidValue,
@@ -64,8 +64,8 @@ where
6464
let mut rng = Xoshiro256StarStar::from_seed(SEED);
6565

6666
let (mut right, mut left) = (
67-
UnorderedColumnLeafBuilder::with_capacity(length / 2),
68-
UnorderedColumnLeafBuilder::with_capacity(length / 2),
67+
UnorderedColumnLayerBuilder::with_capacity(length / 2),
68+
UnorderedColumnLayerBuilder::with_capacity(length / 2),
6969
);
7070
for _ in 0..length / 2 {
7171
left.push_tuple(rng.gen());

benches/gdelt/personal_network.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use dbsp::{
3636
trace::{
3737
consolidation,
3838
layers::{
39-
column_leaf::{OrderedColumnLeaf, OrderedColumnLeafBuilder},
39+
column_layer::{ColumnLayer, ColumnLayerBuilder},
4040
ordered::OrderedBuilder,
4141
Builder as LayerBuilder, MergeBuilder, OrdOffset, TupleBuilder,
4242
},
@@ -437,15 +437,15 @@ struct HashedKVBatch<K, V, R, O = usize> {
437437
offsets: Vec<O>,
438438
// The value+diff pairs associated with any given key can be fetched with
439439
// `values[offsets[keys[&key]]..offsets[keys[&key] + 1]]`
440-
values: OrderedColumnLeaf<V, R>,
440+
values: ColumnLayer<V, R>,
441441
}
442442

443443
impl<K, V, R, O> HashedKVBatch<K, V, R, O> {
444444
fn probe(&self) -> HashedKVBatchProbe<'_, K, V, R, O> {
445445
HashedKVBatchProbe::new(self)
446446
}
447447

448-
fn from_builder(builder: OrderedBuilder<K, OrderedColumnLeafBuilder<V, R>, O>) -> Self
448+
fn from_builder(builder: OrderedBuilder<K, ColumnLayerBuilder<V, R>, O>) -> Self
449449
where
450450
K: DBData,
451451
V: DBData,
@@ -551,8 +551,7 @@ where
551551
consolidation::consolidate(&mut inputs);
552552

553553
let mut keys = HashMap::with_capacity_and_hasher(inputs.len(), Xxh3Builder::new());
554-
let mut values =
555-
<OrderedColumnLeafBuilder<_, _> as TupleBuilder>::with_capacity(inputs.len());
554+
let mut values = <ColumnLayerBuilder<_, _> as TupleBuilder>::with_capacity(inputs.len());
556555
let mut offsets = Vec::with_capacity(inputs.len() + 1);
557556
offsets.push(O::zero());
558557

@@ -762,7 +761,7 @@ impl<'a, V, R> ValueConsumer<'a, V, R, ()> for HashedValueConsumer<'a, V, R> {
762761
}
763762
}
764763

765-
type RawKVBuilder<K, V, R, O> = OrderedBuilder<K, OrderedColumnLeafBuilder<V, R>, O>;
764+
type RawKVBuilder<K, V, R, O> = OrderedBuilder<K, ColumnLayerBuilder<V, R>, O>;
766765

767766
#[derive(SizeOf)]
768767
struct HashedKVBuilder<K, V, R, O = usize>

src/operator/aggregate/average.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{
33
AddAssignByRef, AddByRef, GroupValue, HasOne, HasZero, IndexedZSet, MulByRef, NegByRef,
44
ZRingValue,
55
},
6-
trace::layers::{column_leaf::OrderedColumnLeaf, ordered::OrderedLayer},
6+
trace::layers::{column_layer::ColumnLayer, ordered::OrderedLayer},
77
utils::VecExt,
88
Circuit, DBData, DBTimestamp, OrdIndexedZSet, Stream,
99
};
@@ -291,7 +291,7 @@ where
291291
}
292292

293293
// Safety: `averages.len() == diffs.len()`
294-
let averages = unsafe { OrderedColumnLeaf::from_parts(averages, diffs) };
294+
let averages = unsafe { ColumnLayer::from_parts(averages, diffs) };
295295

296296
// Create a new `OrdIndexedZSet` from our components, notably this doesn't touch
297297
// `keys`, `offs` or `diffs` which means we don't allocate new vectors for them

src/trace/cursor/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,7 @@ pub trait Cursor<'s, K, V, T, R> {
8989
/// is more convenient (and potentially more efficient) than using
9090
/// [`Self::map_times`] to iterate over a single value.
9191
///
92-
/// # Panics
93-
///
94-
/// Panics if not `self.key_valid() && self.val_valid()`.
92+
/// If the current key and value are not valid, behavior is unspecified
9593
fn weight(&mut self) -> R
9694
where
9795
T: PartialEq<()>;
@@ -148,7 +146,7 @@ pub trait UnorderedCursor<'a, K, T, V, R> {
148146
///
149147
/// A value of `false` indicates that the cursor has exhausted all values
150148
/// for this key.
151-
fn value_valid(&self) -> bool;
149+
fn val_valid(&self) -> bool;
152150

153151
/// A reference to the current key. Panics if invalid.
154152
fn key(&self) -> &K;
@@ -162,8 +160,8 @@ pub trait UnorderedCursor<'a, K, T, V, R> {
162160
}
163161

164162
/// Returns a reference to the current value, if valid.
165-
fn get_value(&self) -> Option<&V> {
166-
self.value_valid().then(|| self.value())
163+
fn get_val(&self) -> Option<&V> {
164+
self.val_valid().then(|| self.value())
167165
}
168166

169167
/// Returns the weight associated with the current key/value pair.

src/trace/layers/column_leaf/builders.rs renamed to src/trace/layers/column_layer/builders.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use crate::{
22
algebra::{AddAssignByRef, HasZero},
33
trace::{
44
consolidation::consolidate_from,
5-
layers::{
6-
advance, column_leaf::OrderedColumnLeaf, Builder, MergeBuilder, Trie, TupleBuilder,
7-
},
5+
layers::{advance, column_layer::ColumnLayer, Builder, MergeBuilder, Trie, TupleBuilder},
86
},
97
utils::assume,
108
};
@@ -16,13 +14,13 @@ use std::{
1614

1715
/// A builder for ordered values
1816
#[derive(SizeOf)]
19-
pub struct OrderedColumnLeafBuilder<K, R> {
17+
pub struct ColumnLayerBuilder<K, R> {
2018
// Invariant: `keys.len() == diffs.len()`
2119
keys: Vec<K>,
2220
diffs: Vec<R>,
2321
}
2422

25-
impl<K, R> OrderedColumnLeafBuilder<K, R> {
23+
impl<K, R> ColumnLayerBuilder<K, R> {
2624
/// Get the length of the current builder
2725
pub(crate) fn len(&self) -> usize {
2826
unsafe { self.assume_invariants() }
@@ -39,12 +37,12 @@ impl<K, R> OrderedColumnLeafBuilder<K, R> {
3937
}
4038
}
4139

42-
impl<K, R> Builder for OrderedColumnLeafBuilder<K, R>
40+
impl<K, R> Builder for ColumnLayerBuilder<K, R>
4341
where
4442
K: Ord + Clone,
4543
R: Eq + HasZero + AddAssign + AddAssignByRef + Clone,
4644
{
47-
type Trie = OrderedColumnLeaf<K, R>;
45+
type Trie = ColumnLayer<K, R>;
4846

4947
fn boundary(&mut self) -> usize {
5048
unsafe { self.assume_invariants() }
@@ -55,14 +53,14 @@ where
5553
unsafe { self.assume_invariants() }
5654

5755
// TODO: Should we call `.shrink_to_fit()` here?
58-
OrderedColumnLeaf {
56+
ColumnLayer {
5957
keys: self.keys,
6058
diffs: self.diffs,
6159
}
6260
}
6361
}
6462

65-
impl<K, R> MergeBuilder for OrderedColumnLeafBuilder<K, R>
63+
impl<K, R> MergeBuilder for ColumnLayerBuilder<K, R>
6664
where
6765
K: Ord + Clone,
6866
R: Eq + HasZero + AddAssign + AddAssignByRef + Clone,
@@ -171,7 +169,7 @@ where
171169
}
172170
}
173171

174-
impl<K, R> TupleBuilder for OrderedColumnLeafBuilder<K, R>
172+
impl<K, R> TupleBuilder for ColumnLayerBuilder<K, R>
175173
where
176174
K: Ord + Clone,
177175
R: Eq + HasZero + AddAssign + AddAssignByRef + Clone,
@@ -220,13 +218,13 @@ where
220218

221219
/// A builder for unordered values
222220
#[derive(Debug, Clone, SizeOf)]
223-
pub struct UnorderedColumnLeafBuilder<K, R> {
221+
pub struct UnorderedColumnLayerBuilder<K, R> {
224222
tuples: Vec<(K, R)>,
225223
boundary: usize,
226224
}
227225

228-
impl<K, R> UnorderedColumnLeafBuilder<K, R> {
229-
/// Create a new `UnorderedColumnLeafBuilder`
226+
impl<K, R> UnorderedColumnLayerBuilder<K, R> {
227+
/// Create a new `UnorderedColumnLayerBuilder`
230228
pub const fn new() -> Self {
231229
Self {
232230
tuples: Vec::new(),
@@ -240,12 +238,12 @@ impl<K, R> UnorderedColumnLeafBuilder<K, R> {
240238
}
241239
}
242240

243-
impl<K, R> Builder for UnorderedColumnLeafBuilder<K, R>
241+
impl<K, R> Builder for UnorderedColumnLayerBuilder<K, R>
244242
where
245243
K: Ord + Clone,
246244
R: HasZero + AddAssign + AddAssignByRef + Eq + Clone,
247245
{
248-
type Trie = OrderedColumnLeaf<K, R>;
246+
type Trie = ColumnLayer<K, R>;
249247

250248
fn boundary(&mut self) -> usize {
251249
consolidate_from(&mut self.tuples, self.boundary);
@@ -258,11 +256,11 @@ where
258256

259257
let (keys, diffs) = self.tuples.into_iter().unzip();
260258
// TODO: The indices buffer is dropped here, can we reuse it for other builders?
261-
OrderedColumnLeaf { keys, diffs }
259+
ColumnLayer { keys, diffs }
262260
}
263261
}
264262

265-
impl<K, R> TupleBuilder for UnorderedColumnLeafBuilder<K, R>
263+
impl<K, R> TupleBuilder for UnorderedColumnLayerBuilder<K, R>
266264
where
267265
K: Ord + Clone,
268266
R: HasZero + AddAssign + AddAssignByRef + Eq + Clone,
@@ -303,7 +301,7 @@ where
303301
}
304302
}
305303

306-
impl<K, R> Default for UnorderedColumnLeafBuilder<K, R> {
304+
impl<K, R> Default for UnorderedColumnLayerBuilder<K, R> {
307305
fn default() -> Self {
308306
Self::new()
309307
}

src/trace/layers/column_leaf/consumer.rs renamed to src/trace/layers/column_layer/consumer.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
trace::{
3-
layers::{advance, column_leaf::OrderedColumnLeaf},
3+
layers::{advance, column_layer::ColumnLayer},
44
Consumer, ValueConsumer,
55
},
66
utils::cursor_position_oob,
@@ -12,16 +12,16 @@ use std::mem::MaybeUninit;
1212
// TODO: Fuzz for panic and drop safety
1313

1414
#[derive(Debug)]
15-
pub struct ColumnLeafConsumer<K, R> {
15+
pub struct ColumnLayerConsumer<K, R> {
1616
// Invariant: `storage.len <= self.position`, if `storage.len == self.position` the cursor is
1717
// exhausted
1818
position: usize,
1919
// Invariant: `storage.keys[position..]` and `storage.diffs[position..]` are all valid
20-
storage: OrderedColumnLeaf<MaybeUninit<K>, MaybeUninit<R>>,
20+
storage: ColumnLayer<MaybeUninit<K>, MaybeUninit<R>>,
2121
}
2222

23-
impl<K, R> Consumer<K, (), R, ()> for ColumnLeafConsumer<K, R> {
24-
type ValueConsumer<'a> = ColumnLeafValues<'a, K, R>
23+
impl<K, R> Consumer<K, (), R, ()> for ColumnLayerConsumer<K, R> {
24+
type ValueConsumer<'a> = ColumnLayerValues<'a, K, R>
2525
where
2626
Self: 'a;
2727

@@ -50,7 +50,7 @@ impl<K, R> Consumer<K, (), R, ()> for ColumnLeafConsumer<K, R> {
5050
// Copy out the key and diff
5151
let key = unsafe { self.storage.keys[idx].assume_init_read() };
5252

53-
(key, ColumnLeafValues::new(self))
53+
(key, ColumnLayerValues::new(self))
5454
}
5555

5656
fn seek_key(&mut self, key: &K)
@@ -75,40 +75,40 @@ impl<K, R> Consumer<K, (), R, ()> for ColumnLeafConsumer<K, R> {
7575
}
7676
}
7777

78-
impl<K, R> From<OrderedColumnLeaf<K, R>> for ColumnLeafConsumer<K, R> {
78+
impl<K, R> From<ColumnLayer<K, R>> for ColumnLayerConsumer<K, R> {
7979
#[inline]
80-
fn from(leaf: OrderedColumnLeaf<K, R>) -> Self {
80+
fn from(leaf: ColumnLayer<K, R>) -> Self {
8181
Self {
8282
position: 0,
8383
storage: leaf.into_uninit(),
8484
}
8585
}
8686
}
8787

88-
impl<K, R> Drop for ColumnLeafConsumer<K, R> {
88+
impl<K, R> Drop for ColumnLayerConsumer<K, R> {
8989
fn drop(&mut self) {
9090
// Drop all remaining elements
9191
unsafe { self.storage.drop_range(self.position..) }
9292
}
9393
}
9494

9595
#[derive(Debug)]
96-
pub struct ColumnLeafValues<'a, K, R> {
96+
pub struct ColumnLayerValues<'a, K, R> {
9797
done: bool,
98-
consumer: &'a mut ColumnLeafConsumer<K, R>,
98+
consumer: &'a mut ColumnLayerConsumer<K, R>,
9999
}
100100

101-
impl<'a, K, R> ColumnLeafValues<'a, K, R> {
101+
impl<'a, K, R> ColumnLayerValues<'a, K, R> {
102102
#[inline]
103-
fn new(consumer: &'a mut ColumnLeafConsumer<K, R>) -> Self {
103+
fn new(consumer: &'a mut ColumnLayerConsumer<K, R>) -> Self {
104104
Self {
105105
done: false,
106106
consumer,
107107
}
108108
}
109109
}
110110

111-
impl<'a, K, R> ValueConsumer<'a, (), R, ()> for ColumnLeafValues<'a, K, R> {
111+
impl<'a, K, R> ValueConsumer<'a, (), R, ()> for ColumnLayerValues<'a, K, R> {
112112
fn value_valid(&self) -> bool {
113113
!self.done
114114
}
@@ -131,7 +131,7 @@ impl<'a, K, R> ValueConsumer<'a, (), R, ()> for ColumnLeafValues<'a, K, R> {
131131
}
132132
}
133133

134-
impl<'a, K, R> Drop for ColumnLeafValues<'a, K, R> {
134+
impl<'a, K, R> Drop for ColumnLayerValues<'a, K, R> {
135135
fn drop(&mut self) {
136136
// If the value consumer was never used, drop the difference value
137137
if !self.done {

0 commit comments

Comments
 (0)