Improve SQLite response persistence performance (#496)

This commit is contained in:
Gregory Schier
2026-07-03 14:05:02 -07:00
committed by GitHub
parent 3f9baca85e
commit 273e9c184d
2 changed files with 28 additions and 15 deletions
+18 -5
View File
@@ -7,7 +7,7 @@ use log::info;
use r2d2::Pool;
use r2d2_sqlite::SqliteConnectionManager;
use std::fs::create_dir_all;
use std::path::Path;
use std::path::{Path, PathBuf};
use std::sync::mpsc;
use std::time::Duration;
@@ -22,6 +22,19 @@ pub mod query_manager;
pub mod render;
pub mod util;
fn sqlite_file_manager(path: impl Into<PathBuf>) -> SqliteConnectionManager {
SqliteConnectionManager::file(path.into()).with_init(|conn| {
conn.pragma_update(None, "journal_mode", "WAL")?;
conn.pragma_update(None, "synchronous", "NORMAL")?;
conn.busy_timeout(Duration::from_millis(5000))
})
}
fn sqlite_memory_manager() -> SqliteConnectionManager {
SqliteConnectionManager::memory()
.with_init(|conn| conn.busy_timeout(Duration::from_millis(5000)))
}
/// Initialize the database managers for standalone (non-Tauri) usage.
///
/// Returns a tuple of (QueryManager, BlobManager, event_receiver).
@@ -43,7 +56,7 @@ pub fn init_standalone(
// Main database pool
info!("Initializing app database {db_path:?}");
let manager = SqliteConnectionManager::file(db_path);
let manager = sqlite_file_manager(db_path);
let pool = Pool::builder()
.max_size(100)
.connection_timeout(Duration::from_secs(10))
@@ -55,7 +68,7 @@ pub fn init_standalone(
info!("Initializing blobs database {blob_path:?}");
// Blob database pool
let blob_manager = SqliteConnectionManager::file(blob_path);
let blob_manager = sqlite_file_manager(blob_path);
let blob_pool = Pool::builder()
.max_size(50)
.connection_timeout(Duration::from_secs(10))
@@ -75,7 +88,7 @@ pub fn init_standalone(
/// Useful for testing and CI environments.
pub fn init_in_memory() -> Result<(QueryManager, BlobManager, mpsc::Receiver<ModelPayload>)> {
// Main database pool
let manager = SqliteConnectionManager::memory();
let manager = sqlite_memory_manager();
let pool = Pool::builder()
.max_size(1) // In-memory DB doesn't support multiple connections
.build(manager)
@@ -84,7 +97,7 @@ pub fn init_in_memory() -> Result<(QueryManager, BlobManager, mpsc::Receiver<Mod
migrate_db(&pool)?;
// Blob database pool
let blob_manager = SqliteConnectionManager::memory();
let blob_manager = sqlite_memory_manager();
let blob_pool = Pool::builder()
.max_size(1)
.build(blob_manager)