Skip to content

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

Arhitectura Jellyseerr

2. Fluxul Datelor în Aplicație

2.1 Procesul de Autentificare și Autorizare

sql
CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT NOT NULL,
    Password TEXT,
    Salt TEXT,
    IsActive BOOLEAN,
    IsAdministrator BOOLEAN
);
sql
CREATE TABLE AccessTokens (
    Id TEXT PRIMARY KEY,
    UserId INTEGER,
    DeviceId TEXT,
    DateCreated DATETIME,
    DateLastActivity DATETIME,
    AppName TEXT
);

Fluxul de autentificare:

  1. Clientul trimite cerere de login cu credentials
  2. Serverul validează în baza de date folosind hash-ul parolei
  3. La succes, se generează un token de acces și se salvează în AccessTokens
  4. Token-ul este returnat clientului pentru request-uri viitoare

2.2 Managementul Librăriei Media

sql
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
);
sql
CREATE TABLE MediaItems (
    Id INTEGER PRIMARY KEY,
    Type TEXT,
    MediaType TEXT,
    Container TEXT,
    TotalBitrate INTEGER,
    Path TEXT,
    Size INTEGER
);
sql
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:

  1. Emby monitorizează directorii configurați pentru modificări
  2. La detectarea fișierelor noi, extrage metadata folosind plugin-uri
  3. Salvează metadata în tabelele TypedBaseItems și MediaItems
  4. Actualizează indexul de căutare
Arhitectura Bazelor de Date

2.3 Progresul de Redare și User Data

sql
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:

  1. Clientul raportează progresul la server la intervale regulate
  2. Serverul actualizează PlaybackStatus și UserData
  3. Datele sunt folosite pentru sincronizare între dispozitive
  4. La reconectare, clientul preia ultima poziție salvată
Fluxul Progresului de Redare

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
    └── plugins

4. Comenzi Utile pentru Administrare

4.1 Backup Baza de Date

sql
cp /var/lib/emby/data/library.db /backup/emby/library_backup_$(date +%Y%m%d).db

4.2 Reparare Baza de Date

sql
sqlite3 /var/lib/emby/data/library.db "VACUUM;"

4.3 Verificare Integritate

sql
sqlite3 /var/lib/emby/data/library.db "PRAGMA integrity_check;"

4.4 Resetare Parolă Utilizator

sql
sqlite3 /var/lib/emby/data/library.db "UPDATE Users SET Password=NULL, Salt=NULL WHERE Name='username';"

4.5 Curățare Cache

sql
rm -rf /var/lib/emby/data/cache/*

4.6 Verificare Statistici Baza de Date

sql
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

sql
lsof | grep emby | grep library.db

4.8 Optimizare Baza de Date

sql
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

  1. Fișier media este detectat în directorul monitorizat
  2. Emby extrage metadata folosind providere configurate
  3. Imaginele de poster/backdrop sunt generate și stocate în cache
  4. Informațiile sunt indexate pentru căutare rapidă
  5. Notificări sunt trimise către clienți pentru actualizare UI

6. Sincronizarea între Dispozitive

  1. Toate datele de utilizator sunt centralizate pe server
  2. Clienții folosesc API REST pentru a accesa date
  3. WebSockets pentru notificări în timp real
  4. Cache local pe client pentru performanță
  5. Conflict resolution bazat pe timestamp-uri

© 2025 Popica Adelin. Toate drepturile rezervate.