use once_cell::sync::Lazy; use surrealdb::engine::remote::ws::Client; use surrealdb::engine::remote::ws::Ws; use surrealdb::Surreal; use tokio::sync::mpsc; static DB: Lazy> = Lazy::new(|| Surreal::init()); const NUM: usize = 100_000; #[tokio::main] async fn main() -> surrealdb::Result<()> { DB.connect::("localhost:8000").with_capacity(NUM).await?; DB.use_ns("namespace").use_db("database").await?; let (tx, mut rx) = mpsc::channel::<()>(1); for idx in 0..NUM { let sender = tx.clone(); tokio::spawn(async move { let mut result = DB.query("SELECT * FROM $idx").bind(("idx", idx)).await.unwrap(); let db_idx: Option = result.take(0).unwrap(); if let Some(db_idx) = db_idx { println!("{idx}: {db_idx}"); } drop(sender); }); } drop(tx); rx.recv().await; Ok(()) }