Datový model
Katalog bae je běžné SQLite, deklarované pro coven tabulku po tabulce: synchronizované tabulky putují na každé zařízení, které je může číst; 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 sekciSynchronizované 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ždou importovanou kopii. 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.tracksstrack_artists, plusrelease_artist_rolesatrack_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_formatsaaudio_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).people,ratings,history,playlists,playlist_entries: profil každé osoby a to, co si zaznamenává sama pro sebe. Jsou to tabulky vlastníka: měnit je mohou jen zařízení jejich autora. Řádkyhistoryaplaylistsžijí každý buď ve sdíleném úložišti domácnosti, nebo v soukromém kruhu osoby.
Synchronizované a místní
Odkaz na tuto sekciKaždá tabulka výše se synchronizuje bezpodmínečně: řádky místního vydání se dostanou na každé zařízení jako řádky kteréhokoli jiného vydání, takže každé zařízení ví, co domácnost vlastní, a hodnocení nebo položka playlistu odkazující na stopu místního vydání odkazuje na řádek, který každé zařízení přečte. Na zařízení, které vydání importovalo, zůstává jen jeho audio a cesty, kde leží. Každá tabulka je deklarovaná se svou identitou řádku, publikem, tím, zda je tabulkou vlastníka, a soubory, které nese; test drží deklarace přesně na tomto seznamu.
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í.- Tabulky skenování a importu: sledované složky, skeny, kandidáti importu a jejich koncepty.
source_releasea tabulky pod ní: co bae vytáhl z každého vydání z MusicBrainz a Discogs, které stáhl — údaje o albu a lisování, celý seznam skladeb s autory a díly, možnosti obalu a jak ho nazývají ostatní katalogy — klíčované podle vydání poskytovatele, ne podle místního vydání. Surový JSON se neuchovává; každé zařízení si vydání může stáhnout znovu.local_release_files: cesty k souborům a časy změn místního vydání na tomto zařízení.local_history: přehrání z doby, kdy osoba tohoto zařízení ještě neměla profil, přesunutá do jejího soukromého kruhu, jakmile profil vznikne.
Úpravy dvou zařízení se slučují buňku po buňce a pozdější úprava vyhraje buňku, kterou změnila obě. coven vede účetnictví slučování ve vlastních tabulkách, takže tabulky bae nenesou sloupce hodin.
Bloby
Odkaz na tuto sekciAudio a obrázky jsou soubory coven, každý druh je jmenný prostor s vlastním limitem mezipaměti zařízení: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB) a avatars (64 MiB). Řádek odkazuje na svůj soubor identifikátorem souboru coven: file v release_files, covers a artist_images a avatar_id v people. Velikost souboru, hash obsahu a umístění patří coven a čtou se spojením s coven_files.
Soubory vydání patří uživateli: soubory místního vydání jsou uživatelovy soubory v jejich původních cestách, zaznamenané v local_release_files, a jeho řádky neodkazují na žádný soubor coven. Přesunutí vydání do cloudu jedním zápisem připraví každý soubor v coven a nasměruje každý řádek na jeho soubor; jakmile je uložen poslední, coven je všechny najednou přepne na cloud a ostatní zařízení si každý z nich při prvním čtení stáhnou do mezipaměti. Obaly, obrázky interpretů a avatary patří bae: bae vytvoří bajty (obaly se znovu vykreslí jako náhledy JPEG o šířce nejvýše 600px) a zařízení každý z nich načte, když se poprvé zobrazí, a ponechá si ho, dokud ho limit jeho jmenného prostoru nevytlačí.
Každý soubor se nahrává zašifrovaný pod náhodným názvem, v cestě určené při jeho přípravě, takže pozdější přejmenování objekt nepřesune. Soubor nikdy nemění své bajty: nový obrázek je nový soubor.
Identita ripu
Odkaz na tuto sekciKaždý import vytvoří vydání s novým náhodným ID a vlastními řádky skladeb a souborů. Každé zařízení si do local_release_origin zapíše SHA-256 seřazených relativních cest, velikostí a časů změny souborů, které přečetl každý jeho import; tento záznam se nikdy nesynchronizuje. Složka, jejíž hash toto zařízení zapsalo, je na kartě dokončených importů, ať byla přesunuta kamkoli, a její řádek uvádí jediné vydání z ní importované. Opakovaný import stejných souborů na tomto zařízení selže a karta dokončených importů nenabízí opakovaný import.