59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
use std::time::Instant;
|
|
|
|
use rand::{thread_rng, Rng};
|
|
|
|
fn main() {
|
|
let db = vectordb::VectorDb::open("./db.redb", String::from("moments")).expect("Launched");
|
|
|
|
let total_chunks = 32;
|
|
let chunk_size = 1024 * 32;
|
|
|
|
for i in 0..total_chunks {
|
|
let vectors = (0..chunk_size)
|
|
.map(|_| thread_rng().gen::<[f32; 7]>().into())
|
|
.collect::<Vec<_>>();
|
|
|
|
println!("Inserting vectors");
|
|
let now = Instant::now();
|
|
db.insert_many_vectors(&vectors).expect("Inserted vectors");
|
|
println!("Inserting vectors - Took {:?}", now.elapsed());
|
|
|
|
if i == 0 {
|
|
for _ in 0..4 {
|
|
println!("Creating Hypertree");
|
|
let now = Instant::now();
|
|
db.create_hypertree().expect("Tree created");
|
|
println!("Creating Hypertree - Took {:?}", now.elapsed());
|
|
}
|
|
}
|
|
}
|
|
|
|
let existing_vector = thread_rng().gen::<[f32; 7]>().into();
|
|
|
|
db.insert_vector(&existing_vector).expect("Insert works");
|
|
|
|
let test_vecs = [existing_vector]
|
|
.into_iter()
|
|
.chain((0..50).map(|_| thread_rng().gen::<[f32; 7]>().into()));
|
|
|
|
for v in test_vecs {
|
|
println!("Finding similarities");
|
|
let now = Instant::now();
|
|
let similarities = db
|
|
.find_similarities(v.clone(), 5)
|
|
.expect("Similar vectors exist");
|
|
println!("Finding similarities - Took {:?}", now.elapsed());
|
|
|
|
for id in similarities {
|
|
let similar = db
|
|
.get_vector(id)
|
|
.expect("Got vector")
|
|
.expect("Vector exists");
|
|
println!(
|
|
"similar to {}: {}",
|
|
id,
|
|
v.squared_euclidean_distance(&similar)
|
|
);
|
|
}
|
|
}
|
|
}
|