Přejít k obsahu

Datový model

Katalog bae je běžné SQLite, deklarované pro coven tabulku po tabulce: synchronizované tabulky nesou konfliktové hodiny a putují na každé zařízení; nedeklarované tabulky zařízení nikdy neopustí. Toto rozdělení je nejdůležitější rozhodnutí datového modelu, proto je tato stránka uspořádaná podle něj.

Graf katalogu

Odkaz na tuto sekci

Synchronizované jádro schématu:

  • artists, albums, works: seskupovací vrstva. Album sdružuje svá vydání a ukazuje na primární; díla tvoří graf rodič/potomek pro klasickou strukturu.
  • releases: centrální entita, jeden řádek pro každé lisování. Nese informace o lisování (název, katalogové číslo, čárový kód, země, formát, rok), volitelná metadata o původu, hash obsahu importované složky a naměřenou hlasitost alba. Žádná provenience znamená, že metadata byla zadána přímo; externí provenience jmenuje přesné vydání zdroje, zatímco Značky souborů zaznamenává místní zdroj snapshotu.
  • release_identities: přesná externí identita toho, čím vydání je. Žádné řádky znamenají žádnou externí identitu. Každý řádek pojmenovává vydání a skupinu vydání MusicBrainz nebo Discogs a vydání může obsahovat identity v obou zdrojích současně. Toto je odděleno od provenience: identita se může změnit bez tvrzení, že aktuální editovatelná metadata byla z tohoto zdroje resetována.
  • tracks s track_artists, plus release_artist_roles a track_artist_roles: seznamy stop a kredity, každý kredit označený svým zdrojem.
  • track_works, work_parts, work_artists: nahrávky propojené s díly, která provádějí.
  • audio_formats a audio_format_segments: specifikace přehrávání. Pro každou stopu: kodek, vzorkovací frekvence, bitová hloubka, kanály, změřená hlasitost a špička a délky pregapů. Segmenty mapují stopu na seřazená okna bajtů a vzorků jejích zdrojových souborů; tak může stopa z CUE ripu včetně pregapu pokrývat oblasti jednoho velkého souboru nebo několika souborů.
  • release_files, covers, artist_images: tabulky nesoucí bloby. Řádky jsou položky katalogu; bajty žijí ve vrstvě blobů coven (viz níže).

Synchronizované, podmíněné, místní

Odkaz na tuto sekci

Všechno výše se synchronizuje, ale ne bezpodmínečně. releases je deklarovaná jako podmíněný kořen na sloupci remote: řádek vydání a celý jeho podstrom (stopy, soubory, kredity, formáty, obal) se synchronizují jen tehdy, když je remote true, tedy když je vydání spravované v cloudu. Přepnutí vydání na spravované zveřejní podstrom; nespravované vydání zůstane celé na zařízení, které ho importovalo, i když jeho schéma je synchronizované. Předkové (artists, albums, works) se synchronizují jen tehdy, dokud na ně stále odkazuje nějaké synchronizované vydání, takže zařízení nikdy nedostane interpreta, pod kterým nic není.

Plně místní tabulky, nikdy nedeklarované pro coven:

  • playback_state: aktuální stopa, pozice, fronta, hlasitost, náhodné pořadí a opakování. Přehrávání je fakt zařízení.
  • imports: sledování importních operací.
  • source_release_payloads: archivované surové JSON z MusicBrainz a Discogs, klíčované podle vydání poskytovatele spíše než podle místního vydání.Podporuje přesné resetování a reinterpretaci bez změny synchronizovaného grafu katalogu.

Každá synchronizovaná tabulka nese sloupec _updated_at s hybridními logickými hodinami, registr, podle kterého coven řadí souběžné úpravy po polích; test vynucuje, že synchronizovaná množina a množina nesoucí hodiny jsou přesně stejné.

Audio a obrázky procházejí vrstvou blobů coven ve třech jmenných prostorech, každý s vlastním limitem mezipaměti zařízení: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB).

Soubory vydání dodává uživatel a ukládají se do mezipaměti líně: u nespravovaného vydání je blob externí odkaz na uživatelův soubor v původní cestě; u spravovaného je to nahraný objekt stažený do mezipaměti při prvním čtení. Obaly a obrázky interpretů dodává hostitel a ukládají se předem: bae vytvoří bajty (obaly se znovu vykreslí jako náhledy JPEG o šířce nejvýše 600px) a každé zařízení je při stažení změn načte, aby se mřížky vykreslovaly místně.

V neprůhledném domově se bloby nahrávají pod bezvýznamnými klíči obsahu. V procházetelném domově každý řádek blobu zaznamená čitelnou cloudovou cestu ({artist}/{album}/{filename} pro audio, {album}/{release}/cover.{ext} pro obaly), spočítanou jednou při nahrání, takže pozdější přejmenování objekt nepřesune.

Identita ripu

Odkaz na tuto sekci

releases.content_hash je SHA-256 přes strukturu souborů importované složky (relativní cesty a velikosti), nezávisle na tom, kde složka leží na disku. Díky němu bae rozpozná už importovaný rip, když se znovu objeví ve sledované složce, a reimporty najdou vydání, které mají nahradit.