Preskoči na sadržaj

Model podataka

Katalog bae običan je SQLite, prijavljen coven-u tablicu po tablicu: sinkronizirane tablice putuju na svaki uređaj koji ih može čitati; neprijavljene tablice nikad ne napuštaju uređaj. Ta je podjela najvažnija odluka modela podataka, pa je ova stranica organizirana oko nje.

Sinkronizirano srce sheme:

  • artists, albums, works: sloj grupiranja. Album okuplja svoja izdanja i pokazuje na primarno; djela tvore roditelj/dijete graf za klasičnu strukturu.
  • releases: središnji entitet, jedan redak po uvezenoj kopiji. Nosi činjenice o tiskanju (oznaka, broj kataloga, crtični kod, zemlja, format, godina), opcijski izvor metapodataka, hash sadržaja uvezene mape i izmjerenu glasnoću albuma. Bez podrijetla znači da su metapodaci uneseni izravno; vanjsko podrijetlo naziva točno izvorno izdanje, dok Oznake datoteka bilježi lokalni izvor snimke.
  • release_identities: točni vanjski identiteti za ono što izdanje je. Bez redaka znači da nema vanjskog identiteta. Svaki redak naziva izdanje MusicBrainz ili Discogs i grupu izdanja, a izdanje može sadržavati identitete u oba izvora odjednom. Ovo je odvojeno od podrijetla: identitet se može promijeniti bez tvrdnje da su trenutni metapodaci koji se mogu uređivati resetirani iz tog izvora.
  • tracks s track_artists, plus release_artist_roles i track_artist_roles: popisi pjesama i zasluge, svaka zasluga označena svojim izvorom.
  • track_works, work_parts, work_artists: snimke povezane s djelima koja izvode.
  • audio_formats i audio_format_segments: specifikacije reprodukcije. Po pjesmi: kodek, frekvencija uzorkovanja, dubina bita, kanali, izmjerena glasnoća i vrh te duljine pregapova. Segmenti preslikavaju pjesmu na uređene prozore bajtova i uzoraka njezinih izvornih datoteka, što omogućuje da pjesma iz CUE ripa, uključujući pregap, obuhvati područja jedne velike datoteke ili više datoteka.
  • release_files, covers, artist_images: tablice koje nose binarne objekte. Redci su kataloški zapisi; bajtovi žive u sloju binarnih objekata covena (vidi dolje).
  • people, ratings, history, playlists, playlist_entries: profil svake osobe i ono što bilježi za sebe. To su vlasničke tablice: mijenjati ih mogu samo uređaji njihova autora. Reci history i playlists žive svaki ili u zajedničkom spremištu kućanstva ili u privatnom krugu osobe.

Sinkronizirano i lokalno

Poveznica na ovaj odjeljak

Svaka gornja tablica sinkronizira se bezuvjetno: reci lokalnog izdanja stižu na svaki uređaj kao i reci bilo kojeg drugog izdanja, pa svaki uređaj zna što kućanstvo posjeduje, a ocjena ili stavka popisa koja pokazuje na pjesmu lokalnog izdanja pokazuje na redak koji svaki uređaj može pročitati. Na uređaju koji ga je uvezao ostaju samo zvuk izdanja i putovi na kojima se nalazi. Svaka tablica prijavljena je sa svojim identitetom retka, publikom, time je li vlasnička tablica i datotekama koje nosi; test drži prijave točno na tom popisu.

Potpuno lokalne tablice, nikad prijavljene covenu:

  • playback_state: trenutačna pjesma, položaj, red čekanja, glasnoća, nasumični redoslijed i ponavljanje. Reprodukcija je činjenica uređaja.
  • Tablice skeniranja i uvoza: praćene mape, skeniranja, kandidati za uvoz i njihove skice.
  • source_release i tablice pod njom: što je bae izvukao iz svakog dohvaćenog izdanja s MusicBrainza i Discogsa — podaci o albumu i prešanju, cijeli popis pjesama sa zaslugama i djelima, mogućnosti omota i kako ga zovu drugi katalozi — ključano prema izdanju pružatelja, a ne prema lokalnom izdanju. Sirovi JSON se ne čuva; svaki uređaj može ponovno dohvatiti izdanje.
  • local_release_files: putovi datoteka i vremena izmjene lokalnog izdanja na ovom uređaju.
  • local_history: reprodukcije od prije nego što je osoba ovog uređaja imala profil, premještene u njezin privatni krug kad se profil napravi.

Izmjene dvaju uređaja spajaju se ćeliju po ćeliju, a kasnija izmjena pobjeđuje ćeliju koju su oba promijenila. coven vodi knjigovodstvo spajanja u vlastitim tablicama, pa tablice bae ne nose stupce sata.

Zvuk i slike su datoteke covena, svaka vrsta je imenski prostor s vlastitim proračunom predmemorije uređaja: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB) i avatars (64 MiB). Redak upućuje na svoju datoteku identifikatorom datoteke covena: file u release_files, covers i artist_images te avatar_id u people. Veličina, sažetak sadržaja i lokacija datoteke pripadaju covenu i čitaju se spajanjem s coven_files.

Datoteke izdanja pripadaju korisniku: datoteke lokalnog izdanja korisnikove su datoteke na izvornim putovima, zabilježene u local_release_files, a njegovi reci ne upućuju ni na jednu datoteku covena. Premještanje izdanja u oblak u jednom pisanju priprema svaku datoteku u covenu i usmjerava svaki redak na njegovu datoteku; kad se spremi posljednja, coven ih sve zajedno prebacuje u oblak, a drugi uređaji dohvaćaju svaku u predmemoriju pri prvom čitanju. Omoti, slike izvođača i avatari pripadaju bae: bae proizvodi bajtove (omoti se ponovno renderiraju kao JPEG sličice širine najviše 600 px), a uređaj dohvaća svaki kad se prvi put prikaže i čuva ga dok ga proračun njegova imenskog prostora ne izbaci.

Svaka se datoteka prenosi šifrirana pod nasumičnim nazivom, na put određen kad se pripremi, pa kasnije preimenovanje nikad ne premješta objekt. Datoteka nikad ne mijenja svoje bajtove: nova slika je nova datoteka.

Svaki uvoz stvara izdanje s novim nasumičnim ID-om i vlastitim redovima pjesama i datoteka. Svaki uređaj u local_release_origin bilježi SHA-256 sortiranih relativnih putanja, veličina i vremena izmjene datoteka koje je pročitao svaki njegov uvoz; taj se zapis nikada ne sinkronizira. Mapa čiji je hash ovaj uređaj zabilježio nalazi se na kartici dovršenih uvoza kamo god bila premještena, a njezin redak navodi jedino izdanje uvezeno iz nje. Ponovni uvoz istih datoteka na tom uređaju ne uspijeva, a kartica dovršenih uvoza ne nudi ponovni uvoz.