#vector-database #vector #history #log

nightly vector-db-core

A high-performance vector database core for reading and writing historical records such as logs and chat records

3 releases

0.1.111 Jan 30, 2025
0.1.1 Jan 30, 2025
0.1.0 Jan 29, 2025

#368 in Database interfaces

Download history 347/week @ 2025-01-29 26/week @ 2025-02-05

373 downloads per month

MIT license

65KB
2K SLoC

vector_db_core

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.

usage


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);
}

Dependencies

~2–3MB
~63K SLoC