From 0bad3da7c2e3cf3cd9f9be6fde1b51dfb19eb204 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Fri, 23 Dec 2022 17:19:36 +0800 Subject: [PATCH] time travel query --- cozo-core/benches/time_travel.rs | 78 ++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 4 deletions(-) diff --git a/cozo-core/benches/time_travel.rs b/cozo-core/benches/time_travel.rs index 031a9e34..f4806a6f 100644 --- a/cozo-core/benches/time_travel.rs +++ b/cozo-core/benches/time_travel.rs @@ -128,13 +128,56 @@ fn single_plain_read() { .unwrap(); } +fn plain_aggr() { + TEST_DB + .run_script( + r#" + ?[sum(v)] := *plain{v} + "#, + BTreeMap::default(), + ) + .unwrap(); +} + +fn tt_stupid_aggr(k: usize) { + TEST_DB + .run_script( + &format!( + r#" + r[k, smallest_by(pack)] := *tt{}{{k, vld, v}}, pack = [v, vld] + ?[sum(v)] := r[k, v] + "#, + k + ), + BTreeMap::default(), + ) + .unwrap(); +} + +fn tt_travel_aggr(k: usize) { + TEST_DB + .run_script( + &format!( + r#" + ?[sum(v)] := *tt{}{{v @ "NOW"}} + "#, + k + ), + BTreeMap::default(), + ) + .unwrap(); +} + fn single_tt_read(k: usize) { let i = rand::thread_rng().gen_range(0..10000); TEST_DB .run_script( - &format!(r#" + &format!( + r#" ?[smallest_by(pack)] := *tt{}{{k: $id, vld, v}}, pack = [v, vld] - "#, k), + "#, + k + ), BTreeMap::from([("id".to_string(), json!(i))]), ) .unwrap(); @@ -144,9 +187,12 @@ fn single_tt_travel_read(k: usize) { let i = rand::thread_rng().gen_range(0..10000); TEST_DB .run_script( - &format!(r#" + &format!( + r#" ?[v] := *tt{}{{k: $id, v @ "NOW"}} - "#, k), + "#, + k + ), BTreeMap::from([("id".to_string(), json!(i))]), ) .unwrap(); @@ -182,4 +228,28 @@ fn time_travel_init(_: &mut Bencher) { dbg!(k); dbg!((count as f64) / qps_single_tt_travel_time.elapsed().as_secs_f64()); } + + let count = 1000; + + let plain_aggr_time = Instant::now(); + (0..count).for_each(|_| { + plain_aggr(); + }); + dbg!(plain_aggr_time.elapsed().as_secs_f64() / (count as f64)); + + for k in [1, 10, 100, 1000] { + let tt_stupid_aggr_time = Instant::now(); + (0..count).for_each(|_| { + tt_stupid_aggr(k); + }); + dbg!(tt_stupid_aggr_time.elapsed().as_secs_f64() / (count as f64)); + } + + for k in [1, 10, 100, 1000] { + let tt_travel_aggr_time = Instant::now(); + (0..count).for_each(|_| { + tt_travel_aggr(k); + }); + dbg!(tt_travel_aggr_time.elapsed().as_secs_f64() / (count as f64)); + } }