Chuyển đến nội dung

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ộ mang đồng hồ xung đột và đi tới mọi thiết bị; 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ó.

Trá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 mỗi lần nhấn. 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 đó.
  • tracks với track_artists, cộng release_artist_rolestrack_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_formatsaudio_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).

Đồng bộ, có cổng, cục bộ

Liên kết đến phần này

Tất cả các bảng trên đồng bộ, nhưng không vô điều kiện. releases được khai báo là root có cổng trên cột remote: một hàng release và toàn bộ cây con của nó (tracks, files, credits, formats, cover) chỉ đồng bộ khi remote là true, tức là khi bản phát hành được quản lý trên đám mây. Chuyển một bản phát hành sang được quản lý sẽ công bố cây con; bản phát hành không quản lý hoàn toàn ở lại trên thiết bị đã nhập, dù schema của nó là schema đồng bộ. Các bảng tổ tiên (artists, albums, works) chỉ đồng bộ khi vẫn còn bản phát hành đã đồng bộ tham chiếu tới chúng, nên một thiết bị không bao giờ nhận một nghệ sĩ không có gì bên dưới.

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ị.
  • imports: theo dõi thao tác nhập.
  • ** source_release_payloads **: lưu trữ JSON thô từ MusicBrainz và Discogs, 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ộ. Nó hỗ trợ khởi động lại chính xác và tái diễn giải mà không thay đổi biểu đồ danh mục đồng bộ.

Mọi bảng đồng bộ mang cột _updated_at hybrid-logical-clock, thanh ghi mà merge theo từng trường của coven dùng để sắp thứ tự chỉnh sửa đồng thời; một test bảo đảm tập bảng đồng bộ và tập bảng mang đồng hồ là bằng nhau chính xác.

Âm thanh và ảnh đi qua lớp blob của coven trong ba namespace, mỗi namespace có hạn mức bộ nhớ đệm thiết bị riêng: release_files (20 GiB), covers (512 MiB), artist_images (256 MiB).

Tệp bản phát hành do người dùng cung cấp và được lưu đệm lười: với bản phát hành không quản lý, blob là tham chiếu ngoài tới tệp của người dùng tại đường dẫn gốc; với bản được quản lý, nó là đối tượng đã tải lên được lấy vào bộ nhớ đệm ở lần đọc đầu. Bìa và ảnh nghệ sĩ do host cung cấp và được lưu đệm sớm: bae tạo byte (bìa được render lại thành thumbnail JPEG rộng tối đa 600px), và mọi thiết bị lấy chúng khi pull để lưới hiển thị cục bộ.

Trên nhà mờ đục, blob tải lên dưới khóa nội dung vô nghĩa. Trên nhà duyệt được, mỗi hàng blob ghi một đường dẫn đám mây đọc được ({artist}/{album}/{filename} cho âm thanh, {album}/{release}/cover.{ext} cho bìa), được tính một lần lúc tải lên nên lần đổi tên sau này không di chuyển đối tượng.

Danh tính của một bản rip

Liên kết đến phần này

releases.content_hash là SHA-256 trên cấu trúc tệp của thư mục đã nhập (đường dẫn tương đối và kích thước), độc lập với vị trí thư mục nằm trên đĩa. Đó là cách bae nhận ra một bản rip đã nhập khi nó xuất hiện lại trong thư mục được theo dõi, và cách lượt nhập lại tìm bản phát hành chúng nên thay thế.