डेटा मॉडल
bae का कैटलॉग साधारण SQLite है, जिसे coven को हर तालिका के हिसाब से बताया जाता है: समन्वयित तालिकाएं conflict clock रखती हैं और हर उपकरण तक जाती हैं; घोषित न की गई तालिकाएं उपकरण से बाहर कभी नहीं जातीं। यह विभाजन डेटा मॉडल का सबसे असरदार निर्णय है, इसलिए यह पेज उसी के इर्द-गिर्द बना है।
कैटलॉग 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 में रहते हैं (नीचे देखें)।
समन्वयित, शर्तबद्ध, स्थानीय
इस अनुभाग का लिंकऊपर की सारी चीजें समन्वयित होती हैं, पर बिना शर्त नहीं। releases अपने remote स्तंभ पर gated root के रूप में घोषित है: रिलीज़ पंक्ति और उसका पूरा subtree (ट्रैक, फ़ाइलें, credits, फ़ॉर्मैट, कवर) केवल तब समन्वयित होता है जब remote true हो, यानी रिलीज क्लाउड-प्रबंधित हो। किसी रिलीज को प्रबंधित बनाना subtree प्रकाशित करता है; अप्रबंधित रिलीज पूरी तरह आयात करने वाले उपकरण पर रहती है, भले उसका schema समन्वयित हो। Ancestor टेबल (artists, albums, works) केवल तब समन्वयित होती हैं जब कोई समन्वयित रिलीज अभी भी उन्हें संदर्भित करती हो, इसलिए किसी उपकरण को ऐसा कलाकार कभी नहीं मिलता जिसके नीचे कुछ न हो।
पूरी तरह स्थानीय तालिकाएं, जिन्हें coven को कभी घोषित नहीं किया जाता:
playback_state: मौजूदा ट्रैक, स्थिति, कतार, volume, shuffle और repeat। प्लेबैक उपकरण की अवस्था है।imports: आयात प्रक्रिया पर नजर।source_release_payloads: MusicBrainz और Discogs से अभिलेखित रॉ JSON, स्थानीय रिलीज के बजाय प्रदाता रिलीज द्वारा कुंजीबद्ध. यह सिंक्ड कैटलॉग ग्राफ को बदलने के बिना सटीक रीसेट और पुनः व्याख्या का समर्थन करता है.
हर समन्वयित तालिका में _updated_at hybrid-logical-clock column होता है, वही register जिससे coven का फ़ील्ड-by-फ़ील्ड merge साथ-साथ हुए edits को क्रम देता है; test यह लागू करता है कि समन्वयित set और clock रखने वाला set बिल्कुल समान हों।
Blobs
इस अनुभाग का लिंकAudio और images coven की blob layer से तीन namespaces में जाते हैं, हर एक के अपने उपकरण कैश budget के साथ: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB)।
रिलीज फाइलें उपयोगकर्ता से आई होती हैं और जरूरत पड़ने पर कैश होती हैं: अप्रबंधित रिलीज के लिए blob उपयोगकर्ता की फाइल के मूल path का बाहरी reference है; प्रबंधित रिलीज के लिए यह uploaded object है, जो पहली पढ़ाई पर कैश में आता है। Covers और कलाकार images host से आती हैं और पहले से कैश की जाती हैं: bae बाइट बनाता है (कवर अधिकतम 600px wide JPEG thumbnails के रूप में फिर बनाए जाते हैं), और हर उपकरण pull पर उन्हें लाता है ताकि grids स्थानीय रूप से render हों।
अपारदर्शी घर पर, blobs अर्थहीन content कुंजियां के नीचे अपलोड होते हैं। ब्राउज-योग्य घर पर हर blob पंक्ति पढ़ने योग्य क्लाउड path दर्ज करती है ({artist}/{album}/{filename} audio के लिए, {album}/{release}/cover.{ext} कवर के लिए), जो अपलोड पर एक बार निकाला जाता है ताकि बाद में नाम बदलने से object न हिले।
rip की पहचान
इस अनुभाग का लिंकreleases.content_hash आयातित फोल्डर की फाइल संरचना (सापेक्ष paths और sizes) पर SHA-256 है, इस बात से स्वतंत्र कि फोल्डर disk पर कहां है। इसी से bae watched फ़ोल्डर में फिर दिखने वाले पहले से आयातित rip को पहचानता है, और दोबारा आयात उस रिलीज को ढूंढते हैं जिसे बदलना चाहिए।