Crates.io | vector-db-core |
lib.rs | vector-db-core |
version | 0.1.112 |
created_at | 2025-01-29 13:13:04.075662+00 |
updated_at | 2025-04-09 14:15:17.049129+00 |
description | A high-performance vector database core for reading and writing historical records such as logs and chat records |
homepage | |
repository | https://github.com/tianzeshi-study/vector-db-core |
max_upload_size | |
id | 1534713 |
size | 78,803 |
vector database core is a high-performance Embedded database for reading and writing historical records such as logs and chat records. Fast read and write on both SSDs and HDDs.
use chrono::{DateTime, Local, Utc};
use serde::{
Deserialize,
Serialize,
};
use std::time::Instant;
use vector_db_core::*;
const COUNT: usize = 1000000;
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
pub struct ChatMessage {
pub message_id: i32,
pub sender: String,
pub content: String,
receiver: String,
#[serde(with = "chrono::serde::ts_seconds")]
timestamp: DateTime<Utc>,
}
fn main() {
let mut objs = Vec::new();
// let db: ReadableCache<WritableCache<DynamicVectorManageService<ChatMessage>, ChatMessage>, ChatMessage> =
// let db: ReadableCache<DynamicVectorManageService<ChatMessage>, ChatMessage> =
// let db: WritableCache<DynamicVectorManageService<ChatMessage>, ChatMessage> =
let db: DynamicVectorManageService<ChatMessage> =
VectorEngine::<ChatMessage>::new(
"index.bin".to_string(),
"data.bin".to_string(),
1024* 1024,
);
for i in 0..COUNT {
let my_obj = ChatMessage {
message_id: i as i32,
sender: format!("sender {}", i).to_string(),
content: format!("hello, world! 这是地{}条消息", i+1).to_string(),
receiver: format!("receiver {}", i).to_string(),
timestamp: Local::now().with_timezone(&Utc),
};
objs.push(my_obj);
}
let start = Instant::now(); // 记录开始时间
db.pushx(objs);
let duration = start.elapsed();
println!("extend {} items took: {:?}", COUNT, duration);
let start = Instant::now();
let objs = db.getx(0, COUNT as u64).unwrap();
let getx_duration = start.elapsed();
println!("load {} items took: {:?}", objs.len(), getx_duration);
let start = Instant::now();
let objs = db.getall().unwrap();
let getall_duration = start.elapsed();
println!("get all {} items took: {:?}", objs.len(), getall_duration);
let last_obj = db.get(objs.len() as u64 -1 ).unwrap();
dbg!(last_obj);
}