Merge pull request 'push-zpoknxvwspkr' (#96) from push-zpoknxvwspkr into main
All checks were successful
Build and Push Docker Image / build (push) Successful in 9m3s
All checks were successful
Build and Push Docker Image / build (push) Successful in 9m3s
Reviewed-on: #96
This commit was merged in pull request #96.
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -4,7 +4,7 @@ version = 4
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "PMOMusic"
|
name = "PMOMusic"
|
||||||
version = "0.3.46"
|
version = "0.3.47"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum 0.8.7",
|
"axum 0.8.7",
|
||||||
"console-subscriber",
|
"console-subscriber",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "PMOMusic"
|
name = "PMOMusic"
|
||||||
version = "0.3.47"
|
version = "0.3.48"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -153,33 +153,9 @@ impl DB {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let conn = Connection::open(path)?;
|
let conn = Connection::open(path)?;
|
||||||
conn.execute_batch(
|
conn.execute("PRAGMA foreign_keys = ON", [])?;
|
||||||
"
|
|
||||||
PRAGMA journal_mode = WAL;
|
|
||||||
PRAGMA synchronous = NORMAL;
|
|
||||||
PRAGMA cache_size = -32768;
|
|
||||||
PRAGMA temp_store = MEMORY;
|
|
||||||
PRAGMA mmap_size = 268435456;
|
|
||||||
",
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Index qui MANQUAIT sur les bases existantes:
|
|
||||||
// Ceci s'exécutera TOUT LE TEMPS, pas seulement à la création
|
|
||||||
conn.execute(
|
|
||||||
"CREATE INDEX IF NOT EXISTS idx_metadata_key_value ON metadata (key, value)",
|
|
||||||
[],
|
|
||||||
)?;
|
|
||||||
|
|
||||||
conn.execute(
|
|
||||||
"CREATE INDEX IF NOT EXISTS idx_asset_last_used ON asset (last_used DESC)",
|
|
||||||
[],
|
|
||||||
)?;
|
|
||||||
|
|
||||||
conn.execute(
|
|
||||||
"CREATE INDEX IF NOT EXISTS idx_asset_hits ON asset (hits DESC)",
|
|
||||||
[],
|
|
||||||
)?;
|
|
||||||
|
|
||||||
|
// 1. CRÉATION DES TABLES EN PREMIER
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE TABLE IF NOT EXISTS asset (
|
"CREATE TABLE IF NOT EXISTS asset (
|
||||||
pk TEXT PRIMARY KEY,
|
pk TEXT PRIMARY KEY,
|
||||||
@@ -205,21 +181,30 @@ impl DB {
|
|||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Créer un index sur la collection pour les requêtes rapides
|
// 2. Optimisations SQLite pour production
|
||||||
|
conn.execute_batch(
|
||||||
|
"
|
||||||
|
PRAGMA journal_mode = WAL;
|
||||||
|
PRAGMA synchronous = NORMAL;
|
||||||
|
PRAGMA cache_size = -32768;
|
||||||
|
PRAGMA temp_store = MEMORY;
|
||||||
|
PRAGMA mmap_size = 268435456;
|
||||||
|
",
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// 3. CRÉATION DES INDEX APRÈS LES TABLES
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE INDEX IF NOT EXISTS idx_asset_collection
|
"CREATE INDEX IF NOT EXISTS idx_asset_collection
|
||||||
ON ASSET (collection)",
|
ON ASSET (collection)",
|
||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Créer un index composite pour optimiser la politique LRU (get_oldest)
|
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE INDEX IF NOT EXISTS idx_asset_lru
|
"CREATE INDEX IF NOT EXISTS idx_asset_lru
|
||||||
ON asset (last_used ASC, hits ASC)",
|
ON asset (last_used ASC, hits ASC)",
|
||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Crée un index composite pour rendre unique les ids si défini dans une collection
|
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE UNIQUE INDEX
|
"CREATE UNIQUE INDEX
|
||||||
IF NOT EXISTS asset_collection_id_unique
|
IF NOT EXISTS asset_collection_id_unique
|
||||||
@@ -228,20 +213,32 @@ impl DB {
|
|||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Index sur metadata(key, value) pour rendre get_pk_by_origin_url efficace.
|
|
||||||
// Sans cet index, la requête WHERE key = 'origin_url' AND value = ? fait
|
|
||||||
// un full scan car la PRIMARY KEY est (pk, key).
|
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE INDEX IF NOT EXISTS idx_metadata_key_value ON metadata (key, value)",
|
"CREATE INDEX IF NOT EXISTS idx_metadata_key_value ON metadata (key, value)",
|
||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// LAZY PK SUPPORT: Index sur lazy_pk pour lookups rapides (lazy_pk → real pk)
|
conn.execute(
|
||||||
|
"CREATE INDEX IF NOT EXISTS idx_asset_last_used ON asset (last_used DESC)",
|
||||||
|
[],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"CREATE INDEX IF NOT EXISTS idx_asset_hits ON asset (hits DESC)",
|
||||||
|
[],
|
||||||
|
)?;
|
||||||
|
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE INDEX IF NOT EXISTS idx_asset_lazy_pk ON asset (lazy_pk)",
|
"CREATE INDEX IF NOT EXISTS idx_asset_lazy_pk ON asset (lazy_pk)",
|
||||||
[],
|
[],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"CREATE UNIQUE INDEX IF NOT EXISTS idx_asset_lazy_pk_unique
|
||||||
|
ON asset (lazy_pk) WHERE lazy_pk IS NOT NULL",
|
||||||
|
[],
|
||||||
|
)?;
|
||||||
|
|
||||||
// Index unique sur lazy_pk (non-NULL) pour éviter les doublons
|
// Index unique sur lazy_pk (non-NULL) pour éviter les doublons
|
||||||
// Un lazy_pk ne peut pointer que vers un seul entry
|
// Un lazy_pk ne peut pointer que vers un seul entry
|
||||||
conn.execute(
|
conn.execute(
|
||||||
|
|||||||
@@ -701,7 +701,7 @@ impl QueueBackend for OpenHomeRenderer {
|
|||||||
|
|
||||||
// Background worker: charge les métadonnées petit à petit sans bloquer personne
|
// Background worker: charge les métadonnées petit à petit sans bloquer personne
|
||||||
let queue = self.queue.clone();
|
let queue = self.queue.clone();
|
||||||
tokio::task::spawn_blocking(move || {
|
std::thread::spawn(move || {
|
||||||
debug!("🔄 OpenHome: préchargement métadonnées queue en background");
|
debug!("🔄 OpenHome: préchargement métadonnées queue en background");
|
||||||
if let Ok(mut queue) = queue.lock() {
|
if let Ok(mut queue) = queue.lock() {
|
||||||
// On ne fait que les 10 prochains titres maintenant, le reste on s'en fout
|
// On ne fait que les 10 prochains titres maintenant, le reste on s'en fout
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0.3.47
|
0.3.48
|
||||||
|
|||||||
Reference in New Issue
Block a user