સામગ્રી પર જાઓ

Data model

bae નો catalog સામાન્ય SQLite છે, coven ને table by table જાહેર કરેલો: sync થતાં tables તેમને વાંચી શકે તે દરેક ઉપકરણ પર જાય છે; જાહેર ન કરેલાં tables ઉપકરણ છોડતાં નથી. આ વિભાજન data model નો સૌથી મહત્ત્વનો નિર્ણય છે, તેથી આ page તેની આસપાસ ગોઠવાયેલું છે.

Schema નું synced heart:

  • artists, albums, works: grouping layer. Album તેના releases aggregate કરે છે અને primary one તરફ points કરે છે; works classical structure માટે parent/child graph બનાવે છે.
  • releases: કેન્દ્રીય એકમ, દરેક આયાત કરેલી નકલ માટે એક હરોળ. દબાવવાની હકીકતો (લેબલ, કેટેલોગ નંબર, બારકોડ, દેશ, બંધારણ, વર્ષ), વૈકલ્પિક મેટાડેટા ઉત્પન્ન, આયાત થયેલ ફોલ્ડરનું સમાવિષ્ટ હેશ, અને માપાયેલ એલ્બમ અવાજને લઇ જાય છે. કોઈ ઉત્પન્નનો અર્થ એ નથી કે મેટાડેટા સીધી જ દાખલ થયેલ છે; બાહ્ય ઉત્પન્ન નામો ચોક્કસ સ્ત્રોત રિલીઝ છે, જ્યારે ફાઇલ ટૅગ સ્થાનિક સ્નેપશોટ સ્ત્રોત રેકોર્ડ કરે છે.
  • release_identities: બહારની ચોક્કસ ઓળખાણો માટે જે રિલીઝ * છે *. કોઈ હરોળોનો અર્થ બહારની ઓળખાણો નથી. દરેક હરોળ MusicBrainz અથવા Discogs રિલીઝ અને રિલીઝ જૂથનું નામ છે, અને રિલીઝ બંને સ્ત્રોતોમાં ઓળખાણો એક જ સમયે રાખી શકે છે. આ ઉત્પત્તિથી અલગ છે: ઓળખાણ એ દાવો કર્યા વગર બદલી શકાય છે કે વર્તમાન ફેરફાર કરી શકાય તેવી મેટાડેટા એ સ્ત્રોતમાંથી પુનઃસુયોજિત થયેલ છે.
  • tracks સાથે track_artists, ઉપરાંત release_artist_roles અને track_artist_roles: track lists અને credits, દરેક credit તેના source સાથે tagged.
  • track_works, work_parts, work_artists: recordings તેઓ perform કરે તે works સાથે linked.
  • audio_formats અને audio_format_segments: playback specs. Per track: codec, sample rate, bit depth, channels, measured loudness અને peak, અને pregap lengths. Segments track ને તેના source files ના ordered byte અને sample windows પર map કરે છે, તેથી CUE rip નો track, pregap સહિત, એક મોટી file ના regions અથવા અનેક files માં span કરી શકે છે.
  • release_files, covers, artist_images: blob-bearing tables. Rows catalog entries છે; bytes coven ના blob layer માં રહે છે (નીચે જુઓ).
  • people, ratings, history, playlists, playlist_entries: દરેક વ્યક્તિની profile અને તે પોતાના માટે જે નોંધે છે તે. આ owner tables છે: ફક્ત તેમના લેખકનાં ઉપકરણો તેમને બદલી શકે છે. history અને playlists ની દરેક હરોળ કાં તો ઘરના વહેંચાયેલા store માં, કાં તો વ્યક્તિના ખાનગી circle માં રહે છે.

Sync અને સ્થાનિક

આ વિભાગની લિંક

ઉપરનું દરેક table બિનશરતી sync થાય છે: સ્થાનિક release ની હરોળો બીજા કોઈ પણ release ની જેમ દરેક ઉપકરણ પર પહોંચે છે, તેથી દરેક ઉપકરણ જાણે છે કે ઘર પાસે શું છે, અને સ્થાનિક release ના track તરફ નિર્દેશ કરતું rating કે playlist entry એવી હરોળ તરફ નિર્દેશ કરે છે જે દરેક ઉપકરણ વાંચી શકે. ફક્ત release નું audio, અને તે જ્યાં છે તે paths, import કરનાર ઉપકરણ પર રહે છે. દરેક table તેની હરોળ-ઓળખ, વાચકો, owner table છે કે નહીં, અને તે જે files રાખે છે તેની સાથે જાહેર થાય છે; એક test જાહેરાતોને બરાબર આ યાદી પર રાખે છે.

સંપૂર્ણ local tables, coven ને ક્યારેય declared નહીં:

  • playback_state: current track, position, queue, volume, shuffle અને repeat. Playback device fact છે.
  • Scan અને import tables: નજર રખાતાં ફોલ્ડર્સ, scans, import ઉમેદવારો અને તેમના મુસદ્દા.
  • source_release અને તેની નીચેની tables: bae એ fetch કરેલી દરેક MusicBrainz અને Discogs release માંથી extract કરેલું — album અને pressing ની વિગતો, credits અને works સાથેની આખી tracklist, cover ના વિકલ્પો, અને બીજા catalogs તેને શું કહે છે — સ્થાનિક release ની જગ્યાએ પૂરૂં પાડનાર release દ્વારા કી થયેલ છે. raw JSON રાખવામાં આવતું નથી; કોઈ પણ ઉપકરણ release ફરીથી fetch કરી શકે છે.
  • local_release_files: આ ઉપકરણ પર સ્થાનિક release ના file paths અને ફેરફાર સમય.
  • local_history: આ ઉપકરણની વ્યક્તિની profile બને તે પહેલાંનાં plays, જે profile બને ત્યારે તેના ખાનગી circle માં ખસેડાય છે.

બે ઉપકરણોનાં સંપાદનો cell by cell ભેગાં થાય છે, બંનેએ બદલેલા cell માં પછીનું સંપાદન જીતે છે. coven ભેગા કરવાનો હિસાબ પોતાનાં tables માં રાખે છે, તેથી bae નાં tables માં clock columns નથી.

Audio અને images coven files છે, દરેક પ્રકાર એક namespace છે જેની પોતાની ઉપકરણ cache મર્યાદા છે: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB), અને avatars (64 MiB). હરોળ પોતાની file ને coven file ના id થી દર્શાવે છે: release_files, covers અને artist_images પર file, અને people પર avatar_id. File નું કદ, content hash અને સ્થાન coven નાં છે, જે coven_files સાથે join કરીને વંચાય છે.

Release files વપરાશકર્તાની હોય છે: સ્થાનિક release ની files એ વપરાશકર્તાની પોતાની files છે તેમના મૂળ paths પર, local_release_files માં નોંધાયેલી, અને તેની હરોળો કોઈ coven file ને દર્શાવતી નથી. Release ને cloud માં ખસેડવાથી એક જ write માં દરેક file coven માં તૈયાર થાય છે અને દરેક હરોળ તેની file તરફ નિર્દેશ કરે છે; છેલ્લી file સંગ્રહાય એટલે coven તે બધીને એકસાથે cloud પર ફેરવે છે, અને બીજાં ઉપકરણો પહેલા વાંચન વખતે દરેકને cache માં લાવે છે. Covers, કલાકારની છબીઓ અને avatars bae નાં છે: bae bytes બનાવે છે (covers વધુમાં વધુ 600px પહોળા JPEG thumbnails તરીકે ફરી બને છે), અને ઉપકરણ દરેકને પહેલી વાર બતાવાય ત્યારે લાવે છે અને તેના namespace ની મર્યાદા તેને કાઢી ન નાખે ત્યાં સુધી રાખે છે.

દરેક file રેન્ડમ નામ હેઠળ encrypt થઈને upload થાય છે, એવા path પર જે તે તૈયાર થાય ત્યારે નક્કી થાય છે, તેથી પછીનું rename object ખસેડતું નથી. File ના bytes ક્યારેય બદલાતા નથી: નવી image એટલે નવી file.

દરેક આયાત નવા રેન્ડમ ઓળખકર્તા અને પોતાના ટ્રૅક તથા ફાઇલની હરોળો સાથે રિલીઝ બનાવે છે. દરેક ઉપકરણ local_release_originમાં તેની દરેક આયાતે વાંચેલી ફાઇલોના ક્રમબદ્ધ સાપેક્ષ પાથ, કદ અને ફેરફારના સમયનો SHA-256 નોંધે છે; આ નોંધ ક્યારેય સિંક થતી નથી. જે ફોલ્ડરનો હેશ આ ઉપકરણે નોંધ્યો છે તે ક્યાંય પણ ખસેડાય, પૂર્ણ થયેલ આયાતના ટૅબમાં રહે છે, અને તેની હરોળ તેમાંથી આયાત થયેલી એકમાત્ર રિલીઝ દર્શાવે છે. તે ઉપકરણ પર એ જ ફાઇલો ફરી આયાત કરવી નિષ્ફળ જાય છે, અને પૂર્ણ થયેલ આયાતના ટૅબમાં ફરી આયાત કરવાની ક્રિયા નથી.