use eyros::{DB,Tree2,Coord,Setup,Row}; use rand::random; use std::path::PathBuf; use std::time; type P = (Coord,Coord); type V = u32; type E = Box; #[async_std::main] async fn main() -> Result<(),E> { let args: Vec = std::env::args().collect(); let base = PathBuf::from(args[1].clone()); let mut db: DB<_,Tree2,P,V> = Setup::from_path(&base) .branch_factor(5) .max_records(3_000) .build() .await?; let batch_size = 10_000; let mut count = 0_u64; let mut total = 0f64; for _ in 0..100 { let rows: Vec> = (0..batch_size).map(|_| { let xmin: f32 = random::()*2.0-1.0; let xmax: f32 = xmin + random::().powf(64.0)*(1.0-xmin); let ymin: f32 = random::()*2.0-1.0; let ymax: f32 = ymin + random::().powf(64.0)*(1.0-ymin); let value: u32 = random(); let point = ( Coord::Interval(xmin,xmax), Coord::Interval(ymin,ymax) ); Row::Insert(point, value) }).collect(); let batch_start = time::Instant::now(); db.batch(&rows).await?; let batch_elapsed = batch_start.elapsed().as_secs_f64(); count += batch_size; total += batch_elapsed; println!["{}: batch for {} records in {} seconds", count, batch_size, batch_elapsed]; } let sync_start = time::Instant::now(); db.sync().await?; let sync_elapsed = sync_start.elapsed().as_secs_f64(); total += sync_elapsed; println!["# sync in {} seconds", sync_elapsed]; println!["# wrote {} records in {} seconds\n# {} records / second", count, total, (count as f64) / total]; Ok(()) }