Модел на данните
Каталогът на bae е обикновен SQLite, деклариран към coven таблица по таблица: синхронизираните таблици носят часовник за конфликти и пътуват до всяко устройство; недекларираните таблици никога не напускат устройството. Това разделяне е най-важното решение в модела на данните, затова тази страница е организирана около него.
Графът на каталога
Връзка към този разделСинхронизираното сърце на схемата:
artists,albums,works: слоят за групиране. Албум събира изданията си и сочи към основното; произведенията образуват граф родител/дете за класическа структура.releases: централната единица, по един ред за всяко натискане. Пренася фактите за натискане (етикет, номер на каталога, баркод, страна, формат, година), произход на метаданните по избор, хеш на съдържанието на импортираната папка и измерена сила на звука на албума. Без произход означава, че метаданните са въведени директно; външен произход казва точното изходно издание, докато записва локален източник на моментна снимка.release_identities: точни външни идентичности за това, което дадено издание е. Без редове означава, че няма външна идентичност. Всеки ред се нарича издание и група от издания, а едно издание може да съдържа идентичности и в двата източника едновременно. Това е отделно от произхода: идентичността може да се промени, без да се твърди, че текущите редактируеми метаданни са били нулирани от този източник.tracksсtrack_artists, плюсrelease_artist_rolesиtrack_artist_roles: списъци с песни и заслуги, като всяка заслуга е отбелязана с източника си.track_works,work_parts,work_artists: записи, свързани с произведенията, които изпълняват.audio_formatsиaudio_format_segments: спецификациите за възпроизвеждане. За всяка песен: кодек, честота на дискретизация, битова дълбочина, канали, измерена сила на звука и пик, и дължини на pregaps. Сегментите съпоставят песен към подредени прозорци от байтове и семпли в изходните файлове, така че песен от CUE рип, включително pregap, може да обхваща области от един голям файл или от няколко файла.release_files,covers,artist_images: таблици, които носят blob-ове. Редовете са записи в каталога; байтовете живеят в blob слоя на coven (вижте по-долу).
Синхронизирано, ограничено, локално
Връзка към този разделВсичко горе се синхронизира, но не безусловно. releases е декларирана като ограничен корен върху колоната си remote: редът на изданието и цялото му поддърво (песни, файлове, заслуги, формати, обложка) се синхронизират само докато remote е true, тоест докато изданието се управлява в облака. Превключването на издание към управлявано публикува поддървото; неуправлявано издание остава изцяло на импортиращото устройство, въпреки че схемата му е синхронизирана. Таблиците предци (artists, albums, works) се синхронизират само докато някое синхронизирано издание още ги сочи, така че устройство никога не получава изпълнител без нищо под него.
Изцяло локални таблици, никога недекларирани към coven:
playback_state: текуща песен, позиция, опашка, сила на звука, разбъркване и повторение. Възпроизвеждането е факт на устройството.imports: проследяване на операция по импортиране.- ** [ЗХК0] **: архивиран суров [ЗХК20] от [ЗХК16] и [ЗХК17], ключов от доставчика, а не от локално издание.Той поддържа точно нулиране и повторно тълкуване, без да променя синхронизираната графика на каталога.
Всяка синхронизирана таблица носи _updated_at колона с хибриден логически часовник, регистърът, по който coven подрежда едновременните редакции поле по поле; тест налага синхронизираният набор и наборът с часовник да са точно еднакви.
Blob-ове
Връзка към този разделАудиото и изображенията минават през blob слоя на coven в три пространства от имена, всяко със собствен лимит на кеша на устройството: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB).
Файловете на издания са дадени от потребителя и се кешират при нужда: за неуправлявано издание blob-ът е външна препратка към файла на потребителя на оригиналния му път; за управлявано издание е качен обект, който се изтегля в кеша при първо четене. Обложките и изображенията на изпълнители се предоставят от приложението и се кешират предварително: bae произвежда байтовете (обложките се рендерират наново като JPEG миниатюри с ширина най-много 600px), а всяко устройство ги изтегля при получаване на промени, така че решетките се рендерират локално.
В непрозрачен дом blob-овете се качват под безсмислени ключове за съдържание. В прегледен дом всеки blob ред записва четим облачен път ({artist}/{album}/{filename} за аудио, {album}/{release}/cover.{ext} за обложки), изчислен веднъж при качване, така че по-късно преименуване никога не мести обекта.
Идентичност на рип
Връзка към този разделreleases.content_hash е SHA-256 върху файловата структура на импортираната папка (относителни пътища и размери), независимо от мястото на папката на диска. Така bae разпознава вече импортиран рип, когато той отново се появи в наблюдавана папка, и така повторните импорти намират изданието, което трябва да заменят.