Mô hình dữ liệu
Catalog của bae là SQLite bình thường, được khai báo cho coven từng bảng một: bảng đồng bộ đi tới mọi thiết bị đọc được chúng; bảng không khai báo không bao giờ rời thiết bị. Phần tách này là quyết định chịu tải nhất của mô hình dữ liệu, nên trang này được tổ chức quanh nó.
Đồ thị catalog
Liên kết đến phần nàyTrái tim đồng bộ của schema:
artists,albums,works: lớp nhóm. Một album gom các bản phát hành của nó và trỏ tới bản chính; works tạo đồ thị cha/con cho cấu trúc nhạc cổ điển.- **
releases**: thực thể trung tâm, một hàng cho mỗi bản sao được nhập. Chuyển thực tế nhấn (nhãn, số danh mục, mã vạch, quốc gia, định dạng, năm), nguồn siêu dữ liệu tùy chọn, hàm băm nội dung của thư mục nhập, và âm lượng album đo. Không có nguồn có nghĩa là siêu dữ liệu đã được nhập trực tiếp; nguồn bên ngoài có tên chính xác của bản phát hành nguồn, trong khi Thẻ của tệp ghi lại nguồn ảnh chụp cục bộ. - **
release_identities**: danh tính chính xác bên ngoài cho một bản phát hành * là *. Không hàng có nghĩa là không có danh tính bên ngoài. Mỗi hàng có tên một bản phát hành và nhóm phát hành MusicBrainz hoặc Discogs, và một bản phát hành có thể có danh tính ở cả hai nguồn cùng một lúc. Điều này tách biệt với nguồn gốc: danh tính có thể thay đổi mà không yêu cầu rằng siêu dữ liệu có thể chỉnh sửa hiện tại đã được đặt lại từ nguồn đó. tracksvớitrack_artists, cộngrelease_artist_rolesvàtrack_artist_roles: danh sách track và ghi công, mỗi ghi công gắn với nguồn của nó.track_works,work_parts,work_artists: bản thu liên kết tới tác phẩm mà chúng trình diễn.audio_formatsvàaudio_format_segments: đặc tả phát lại. Theo từng track: codec, sample rate, độ sâu bit, kênh, độ lớn âm thanh và peak đã đo, và độ dài pregap. Segment ánh xạ một track lên các cửa sổ byte và sample có thứ tự của tệp nguồn, đây là cách track của bản rip CUE, gồm cả pregap, có thể trải qua các vùng của một tệp lớn, hoặc nhiều tệp.release_files,covers,artist_images: bảng mang blob. Hàng là mục catalog; byte nằm trong lớp blob của coven (xem bên dưới).people,ratings,history,playlists,playlist_entries: hồ sơ của mỗi người và những gì họ ghi lại cho chính mình. Đây là các bảng chủ sở hữu: chỉ thiết bị của tác giả mới đổi được chúng. Mỗi hànghistoryvàplaylistsnằm hoặc trong store chung của gia đình, hoặc trong vòng riêng của người đó.
Đồng bộ và cục bộ
Liên kết đến phần nàyMọi bảng ở trên đều đồng bộ, vô điều kiện: các hàng của một bản phát hành cục bộ tới mọi thiết bị như của bất kỳ bản phát hành nào khác, nên mọi thiết bị đều biết gia đình sở hữu gì, và một đánh giá hay mục danh sách phát trỏ tới track của một bản phát hành cục bộ là trỏ tới một hàng mọi thiết bị đều đọc được. Chỉ âm thanh của bản phát hành, và các đường dẫn nơi nó nằm, ở lại trên thiết bị đã nhập. Mỗi bảng được khai báo kèm định danh hàng, đối tượng đọc, việc có phải bảng chủ sở hữu hay không và các tệp nó mang; một test giữ các khai báo đúng theo danh sách đó.
Các bảng hoàn toàn cục bộ, không bao giờ khai báo cho coven:
playback_state: track hiện tại, vị trí, hàng đợi, âm lượng, phát ngẫu nhiên và lặp lại. Phát lại là sự kiện của thiết bị.- Các bảng quét và nhập: thư mục được theo dõi, lượt quét, ứng viên nhập và bản nháp của chúng.
source_releasevà các bảng bên dưới: những gì bae trích xuất từ mỗi bản phát hành MusicBrainz và Discogs đã tải về — thông tin album và bản ép, danh sách bài hát đầy đủ kèm người tham gia và tác phẩm, các lựa chọn bìa, và tên các danh mục khác gọi nó — khóa theo bản phát hành của nhà cung cấp thay vì bản phát hành cục bộ. JSON thô không được giữ lại; mọi thiết bị đều có thể tải lại bản phát hành.local_release_files: đường dẫn tệp và thời điểm sửa đổi của một bản phát hành cục bộ trên thiết bị này.local_history: các lượt phát từ trước khi người dùng của thiết bị này có hồ sơ, được chuyển vào vòng riêng của họ khi hồ sơ được tạo.
Chỉnh sửa của hai thiết bị được gộp theo từng ô, chỉnh sửa muộn hơn thắng ở ô cả hai cùng sửa. coven giữ sổ sách gộp trong các bảng riêng của nó, nên bảng của bae không mang cột đồng hồ.
Âm thanh và ảnh là tệp coven, mỗi loại là một không gian tên có hạn mức bộ nhớ đệm thiết bị riêng: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB), và avatars (64 MiB). Một hàng tham chiếu tệp của nó bằng id của tệp coven: file trên release_files, covers và artist_images, và avatar_id trên people. Kích thước, hash nội dung và vị trí của tệp thuộc về coven, được đọc bằng cách join với coven_files.
Tệp bản phát hành thuộc về người dùng: tệp của một bản phát hành cục bộ là tệp của người dùng tại đường dẫn gốc, được ghi trong local_release_files, và các hàng của nó không tham chiếu tệp coven nào. Chuyển bản phát hành lên đám mây sẽ chuẩn bị mọi tệp với coven trong một lần ghi và trỏ từng hàng tới tệp của nó; khi tệp cuối cùng được lưu, coven chuyển tất cả lên đám mây cùng lúc, và thiết bị khác lấy từng tệp vào bộ nhớ đệm ở lần đọc đầu. Bìa, ảnh nghệ sĩ và ảnh đại diện thuộc về bae: bae tạo byte (bìa được render lại thành thumbnail JPEG rộng tối đa 600px), và một thiết bị lấy từng ảnh khi nó được hiển thị lần đầu và giữ nó cho tới khi hạn mức của không gian tên chứa nó loại bỏ nó.
Mỗi tệp được tải lên đã mã hóa dưới tên ngẫu nhiên, tại một đường dẫn cố định khi nó được chuẩn bị, nên lần đổi tên sau này không di chuyển đối tượng. Một tệp không bao giờ đổi byte: ảnh mới là tệp mới.
Danh tính của một bản rip
Liên kết đến phần nàyMỗi lần nhập tạo một bản phát hành có ID ngẫu nhiên mới và các hàng bản nhạc, tệp riêng. Mỗi thiết bị ghi vào local_release_origin một SHA-256 của các đường dẫn tương đối đã sắp xếp, kích thước và thời điểm sửa đổi của các tệp mà mỗi lần nhập của nó đã đọc; bản ghi này không bao giờ được đồng bộ. Một thư mục có hash do thiết bị này ghi lại nằm trong thẻ đã hoàn tất dù được chuyển đi đâu, và hàng của nó nêu bản phát hành duy nhất đã nhập từ đó. Nhập lại cùng các tệp đó trên thiết bị này sẽ thất bại, và thẻ đã hoàn tất không có thao tác nhập lại.