डेटा मॉडल
bae का कैटलॉग साधारण SQLite है, जिसे coven को हर तालिका के हिसाब से बताया जाता है: सिंक होने वाली तालिकाएं हर उस उपकरण तक जाती हैं जो उन्हें पढ़ सकता है; घोषित न की गई तालिकाएं उपकरण से बाहर कभी नहीं जातीं। यह विभाजन डेटा मॉडल का सबसे असरदार निर्णय है, इसलिए यह पेज उसी के इर्द-गिर्द बना है।
कैटलॉग graph
इस अनुभाग का लिंकschema का समन्वयित केंद्र:
artists,albums,works: समूह बनाने की परत। एल्बम अपनी रिलीज़ें को जोड़ता है और primary रिलीज़ की ओर इशारा करता है; works classical संरचना के लिए parent/child graph बनाते हैं।releases: केंद्रीय इकाई, हर आयातित कॉपी के लिए एक पंक्ति. दबाव तथ्यों (लेबल, कैटलॉग संख्या, बारकोड, देश, प्रारूप, वर्ष), वैकल्पिक मेटाडाटा स्रोत, आयातित फ़ोल्डर की सामग्री हैश, और मापी गई एलबम आवाज़ को ले जाता है. कोई स्रोत का मतलब है कि मेटाडाटा सीधे प्रविष्ट किया गया था; बाहरी स्रोत नाम सही स्रोत रिलीज है, जबकि फ़ाइल टैग एक स्थानीय स्नैपशॉट स्रोत रिकॉर्ड करता है.release_identities: एक रिलीज * है * के लिए सटीक बाहरी पहचान. कोई पंक्ति का मतलब कोई बाहरी पहचान नहीं है. प्रत्येक पंक्ति एक MusicBrainz या Discogs रिलीज और रिलीज समूह का नाम है, और एक रिलीज दोनों स्रोतों में एक साथ पहचान रख सकता है. यह उत्पत्ति से अलग है: पहचान बिना दावा किए बदल सकती है कि वर्तमान संपादित मेटाडाटा उस स्रोत से रीसेट किया गया था.trackswithtrack_artists, plusrelease_artist_rolesandtrack_artist_roles: ट्रैक सूचियां और credits, हर credit अपने स्रोत से चिन्हित।track_works,work_parts,work_artists: recordings उन works से जुड़ी हैं जिन्हें वे प्रस्तुत करती हैं।audio_formatsandaudio_format_segments: प्लेबैक विशिष्टताएं। हर ट्रैक के लिए: codec, नमूना rate, bit depth, channels, मापा गया loudness और peak, और pregap lengths। Segments ट्रैक को उसकी स्रोत फाइलों की क्रमबद्ध बाइट और नमूना खिड़कियों पर रखते हैं; इसी से CUE rip का ट्रैक, प्रीगैप सहित, एक बड़ी फाइल या कई फाइलों के हिस्सों में फैल सकता है।release_files,covers,artist_images: blob रखने वाली तालिकाएं। पंक्तियां कैटलॉग प्रविष्टियां हैं; बाइट coven की blob layer में रहते हैं (नीचे देखें)।people,ratings,history,playlists,playlist_entries: हर व्यक्ति की प्रोफ़ाइल और वह जो अपने लिए दर्ज करता है। ये owner तालिकाएं हैं: केवल उनके लेखक के उपकरण उन्हें बदल सकते हैं।historyऔरplaylistsकी हर पंक्ति या तो घर के साझा store में रहती है या उस व्यक्ति के निजी circle में।
सिंक और स्थानीय
इस अनुभाग का लिंकऊपर की हर तालिका बिना शर्त सिंक होती है: स्थानीय रिलीज की पंक्तियां किसी भी दूसरी रिलीज की तरह हर उपकरण तक पहुंचती हैं, इसलिए हर उपकरण जानता है कि घर के पास क्या है, और किसी स्थानीय रिलीज के ट्रैक की ओर इशारा करने वाली रेटिंग या प्लेलिस्ट प्रविष्टि ऐसी पंक्ति की ओर इशारा करती है जिसे हर उपकरण पढ़ सकता है। केवल रिलीज का ऑडियो, और वे paths जहां वह रखा है, आयात करने वाले उपकरण पर रहते हैं। हर तालिका अपनी पंक्ति पहचान, अपने दर्शक, owner तालिका है या नहीं, और उसकी फाइलों के साथ घोषित होती है; एक test घोषणाओं को ठीक इसी सूची पर बनाए रखता है।
पूरी तरह स्थानीय तालिकाएं, जिन्हें coven को कभी घोषित नहीं किया जाता:
playback_state: मौजूदा ट्रैक, स्थिति, कतार, volume, shuffle और repeat। प्लेबैक उपकरण की अवस्था है।- स्कैन और आयात तालिकाएं: देखे जा रहे फोल्डर, स्कैन, आयात उम्मीदवार और उनके मसौदे।
source_releaseऔर उसके नीचे की टेबलें: bae ने MusicBrainz और Discogs की हर लाई गई रिलीज़ से जो निकाला — एल्बम और प्रेसिंग की जानकारी, क्रेडिट और रचनाओं सहित पूरी ट्रैकलिस्ट, कवर के विकल्प, और दूसरे कैटलॉग उसे किस नाम से जानते हैं — स्थानीय रिलीज के बजाय प्रदाता रिलीज द्वारा कुंजीबद्ध। raw JSON नहीं रखा जाता; कोई भी डिवाइस रिलीज़ दोबारा ला सकता है।local_release_files: इस उपकरण पर किसी स्थानीय रिलीज के फाइल paths और बदलाव समय।local_history: इस उपकरण के व्यक्ति की प्रोफ़ाइल बनने से पहले के प्ले, जो प्रोफ़ाइल बनने पर उसके निजी circle में चले जाते हैं।
दो उपकरणों के संपादन सेल-दर-सेल मिलाए जाते हैं, और जिस सेल को दोनों ने बदला उसमें बाद वाला संपादन जीतता है। coven मिलाने का हिसाब अपनी तालिकाओं में रखता है, इसलिए bae की तालिकाओं में clock columns नहीं होते।
Blobs
इस अनुभाग का लिंकऑडियो और चित्र coven फाइलें हैं, हर प्रकार एक namespace है जिसका अपना उपकरण कैश budget है: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB), और avatars (64 MiB)। पंक्ति अपनी फाइल को coven फाइल की id से संदर्भित करती है: release_files, covers और artist_images पर file, और people पर avatar_id। फाइल का आकार, सामग्री का hash और स्थान coven के हैं, जिन्हें coven_files के साथ join करके पढ़ा जाता है।
रिलीज फाइलें उपयोगकर्ता की होती हैं: स्थानीय रिलीज की फाइलें उपयोगकर्ता की अपनी फाइलें हैं, अपने मूल paths पर, जो local_release_files में दर्ज होती हैं, और उसकी पंक्तियां किसी coven फाइल को संदर्भित नहीं करतीं। रिलीज को क्लाउड में ले जाना एक ही लेखन में हर फाइल को coven में तैयार करता है और हर पंक्ति को उसकी फाइल की ओर इंगित करता है; आखिरी फाइल रखे जाते ही coven सबको एक साथ क्लाउड पर बदल देता है, और दूसरे उपकरण पहली पढ़ाई पर हर फाइल को कैश में लाते हैं। कवर, कलाकार चित्र और अवतार bae के होते हैं: bae बाइट बनाता है (कवर अधिकतम 600px चौड़े JPEG thumbnails के रूप में फिर बनाए जाते हैं), और उपकरण हर एक को पहली बार दिखाए जाने पर लाता है और तब तक रखता है जब तक उसके namespace का budget उसे निकाल न दे।
हर फाइल यादृच्छिक नाम के नीचे एन्क्रिप्ट होकर अपलोड होती है, ऐसे path पर जो उसके तैयार होते समय तय होता है, इसलिए बाद में नाम बदलने से ऑब्जेक्ट नहीं हिलता। कोई फाइल कभी अपने बाइट नहीं बदलती: नया चित्र नई फाइल है।
rip की पहचान
इस अनुभाग का लिंकहर आयात एक नई यादृच्छिक पहचान और अपने ट्रैक तथा फ़ाइल की पंक्तियों वाला रिलीज़ बनाता है। हर डिवाइस local_release_origin में अपने हर आयात द्वारा पढ़ी गई फ़ाइलों के क्रमबद्ध सापेक्ष पथ, आकार और संशोधन समय का SHA-256 दर्ज करता है; यह रिकॉर्ड कभी सिंक नहीं होता। जिस फ़ोल्डर का हैश इस डिवाइस ने दर्ज किया है, वह कहीं भी ले जाया जाए, पूर्ण आयात वाले टैब में रहता है, और उसकी पंक्ति उससे आयात किए गए एकमात्र रिलीज़ का नाम बताती है। उसी डिवाइस पर वही फ़ाइलें दोबारा आयात करना विफल होता है, और पूर्ण आयात वाले टैब में दोबारा आयात करने की क्रिया नहीं होती।