Fluxuri de Date și Managementul Bazelor de Date
1. Arhitectura Bază de Date
1.1 Sistemul de Bază de Date
Emby folosește SQLite ca bază de date principală, cu suport opțional pentru SQL Server în mediile enterprise. Baza de date este stocată în directorul de date al aplicației și conține toate metadata, setările utilizatorilor, datele de autentificare și statisticile de utilizare.
1.2 Structura Principală a Bazelor de Date
Emby creează și gestionează mai multe fișiere de baze de date:
library.db - Database-ul principal care conține:
- Tabele pentru utilizatori și autentificare
- Metadata media (filme, seriale, muzică)
- Date despre progresul de redare
- Setări utilizator și preferințe
activity.db - Stochează date despre activități și log-uri
channels.db - Date despre canale și plugin-uri
2. Fluxul Datelor în Aplicație
2.1 Procesul de Autentificare și Autorizare
CREATE TABLE Users (
Id INTEGER PRIMARY KEY,
Name TEXT NOT NULL,
Password TEXT,
Salt TEXT,
IsActive BOOLEAN,
IsAdministrator BOOLEAN
);CREATE TABLE AccessTokens (
Id TEXT PRIMARY KEY,
UserId INTEGER,
DeviceId TEXT,
DateCreated DATETIME,
DateLastActivity DATETIME,
AppName TEXT
);Fluxul de autentificare:
- Clientul trimite cerere de login cu credentials
- Serverul validează în baza de date folosind hash-ul parolei
- La succes, se generează un token de acces și se salvează în AccessTokens
- Token-ul este returnat clientului pentru request-uri viitoare
2.2 Managementul Librăriei Media
CREATE TABLE TypedBaseItems (
Id INTEGER PRIMARY KEY,
Type TEXT NOT NULL,
Path TEXT,
Name TEXT,
MetadataLanguage TEXT,
MetadataCountryCode TEXT,
ProviderIds TEXT,
PremiereDate DATETIME,
EndDate DATETIME
);CREATE TABLE MediaItems (
Id INTEGER PRIMARY KEY,
Type TEXT,
MediaType TEXT,
Container TEXT,
TotalBitrate INTEGER,
Path TEXT,
Size INTEGER
);CREATE TABLE UserData (
Id INTEGER PRIMARY KEY,
UserId INTEGER,
ItemId INTEGER,
PlayCount INTEGER,
IsFavorite BOOLEAN,
PlaybackPositionTicks INTEGER,
LastPlayedDate DATETIME
);Fluxul de scanare a librăriei:
- Emby monitorizează directorii configurați pentru modificări
- La detectarea fișierelor noi, extrage metadata folosind plugin-uri
- Salvează metadata în tabelele TypedBaseItems și MediaItems
- Actualizează indexul de căutare
2.3 Progresul de Redare și User Data
CREATE TABLE PlaybackStatus (
Id INTEGER PRIMARY KEY,
UserId INTEGER,
ItemId INTEGER,
PositionTicks INTEGER,
AudioStreamIndex INTEGER,
SubtitleStreamIndex INTEGER,
VolumeLevel INTEGER,
IsPaused BOOLEAN,
PlaybackStartTime DATETIME,
LastPlaybackUpdate DATETIME
);Fluxul de urmărire a redării:
- Clientul raportează progresul la server la intervale regulate
- Serverul actualizează PlaybackStatus și UserData
- Datele sunt folosite pentru sincronizare între dispozitive
- La reconectare, clientul preia ultima poziție salvată
2.4 Sistemul de Plugin-uri și Extensii
CREATE TABLE Plugins ( Id INTEGER PRIMARY KEY, Name TEXT NOT NULL, Version TEXT, AssemblyPath TEXT, Configuration TEXT, Status INTEGER );
CREATE TABLE PluginConfigurations ( PluginId INTEGER, Key TEXT, Value TEXT );
3. Structura Fișierelor și Directoarelor
programdata
├── cache
│ ├── images
│ ├── metadata
│ ├── transcode
│ └── certificates
│
├── config
│ ├── system.xml
│ ├── networking.xml
│ ├── users.db
│ ├── authentication.db
│ └── policies.json
│
├── data
│ ├── library.db
│ ├── library.db-shm
│ ├── library.db-wal
│ ├── sessiondata
│ ├── stats
│ └── scheduledtasks
│
├── logs
│ ├── embyserver.txt
│ ├── transcoding-*.txt
│ └── ffmpeg-*.log
│
├── metadata
│ ├── Movies
│ ├── TV Shows
│ ├── Music
│ └── People
│
├── notifications
│ ├── smtp.json
│ └── push.json
│
├── plugins
│ ├── <plugin_name>.dll
│ ├── <plugin_folder>/
│ └── configurations.json
│
├── root
│ ├── default.xml
│ └── images
│
└── updates
├── server
└── plugins4. Comenzi Utile pentru Administrare
4.1 Backup Baza de Date
cp /var/lib/emby/data/library.db /backup/emby/library_backup_$(date +%Y%m%d).db4.2 Reparare Baza de Date
sqlite3 /var/lib/emby/data/library.db "VACUUM;"4.3 Verificare Integritate
sqlite3 /var/lib/emby/data/library.db "PRAGMA integrity_check;"4.4 Resetare Parolă Utilizator
sqlite3 /var/lib/emby/data/library.db "UPDATE Users SET Password=NULL, Salt=NULL WHERE Name='username';"4.5 Curățare Cache
rm -rf /var/lib/emby/data/cache/*4.6 Verificare Statistici Baza de Date
sqlite3 /var/lib/emby/data/library.db ".tables"
sqlite3 /var/lib/emby/data/library.db "SELECT name FROM sqlite_master WHERE type='table';"4.7 Monitorizare Conexiuni Active
lsof | grep emby | grep library.db4.8 Optimizare Baza de Date
sqlite3 /var/lib/emby/data/library.db "ANALYZE;"
sqlite3 /var/lib/emby/data/library.db "REINDEX;"5. Fluxul de Date la Încărcare Conținut
- Fișier media este detectat în directorul monitorizat
- Emby extrage metadata folosind providere configurate
- Imaginele de poster/backdrop sunt generate și stocate în cache
- Informațiile sunt indexate pentru căutare rapidă
- Notificări sunt trimise către clienți pentru actualizare UI
6. Sincronizarea între Dispozitive
- Toate datele de utilizator sunt centralizate pe server
- Clienții folosesc API REST pentru a accesa date
- WebSockets pentru notificări în timp real
- Cache local pe client pentru performanță
- Conflict resolution bazat pe timestamp-uri